$URLでgrepし、$URLをsedします。

$URLでgrepし、$URLをsedします。

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挿入しようとします。また、値にコマンド区切り文字を妨げる複数の文字が含まれているため、失敗します。$URL1.txt//s

おすすめ記事