1.txtには次のものがあります。
https://www.google.se/
https://www.bing.com/
URL=$(grep ".*" ./1.txt) | sed "s/$/\">${URL}/" ./1.txt > ./2.txt
2.txtと入力します。
https://www.google.se/">
https://www.bing.com/">
2.txtが欲しい:
https://www.google.se/">https://www.google.se/
https://www.bing.com/">https://www.bing.com/
ベストアンサー1
データを変数に保存する理由がないようです。
awk -v OFS='">' '{ print $0, $0 }' 1.txt >2.txt
これにより、必要な操作を実行できます。つまり、">
各行の最後に2文字を挿入し、その後に行の元の内容を挿入します。このコードでは、行を新しいフィールドに出力してこれを行います。出力フィールド区切り文字がOFS
自動的にその間に挿入されます。値はコマンドラインでOFS
設定されます。">
または以下を使用してくださいsed
。
sed 's/\(.*\)/\1">\1/' 1.txt >2.txt
これは、キャプチャグループを使用して行全体をキャプチャします。その後、キャプチャされたビット、文字列、および">
キャプチャされたビットに置き換えられます。
コメントで指摘したように、より短いバリエーションは
sed 's/.*/&">&/' 1.txt >2.txt
&
コマンドの代替部分にある場合、s
入力ビットは式と一致するビットで置き換えられます。式は、完全な行があり、.*
行が途中に2回挿入されることです。&
&">&
">
あなたのパイプライン、
URL=$(grep ".*" ./1.txt) | sed "s/$/\">${URL}/" ./1.txt > ./2.txt
左と右が互いに独立して実行されるため(そして2つの間に通信がないため)、特に意味はありません。式の値は$URL
空ですsed
。
使ってみた方なら
URL=$(grep ".*" ./1.txt); sed "s/$/\">${URL}/" ./1.txt >./2.txt
これは次のとおりです。
URL=$(<./1.txt); sed "s/$/\">${URL}/" ./1.txt >./2.txt
このコマンドは、各行の末尾に変数の内容全体をsed
挿入しようとします。また、値にコマンド区切り文字を妨げる複数の文字が含まれているため、失敗します。$URL
1.txt
/
/
s