次の入力ファイルがあります。
1
30
35
90 ...
私がやりたいことは、次のように表示されるように修正することです。
sed -i '1s///g' file_to_modify
sed -i '30s///g' file_to_modify
Linuxでこれを行う方法を知っていますか?
答え1
lines.list
行番号を含むファイルがあり、リストされている各行でsed
実行される編集スクリプトを作成したいとします。s///g
sed 's:$:s///g:' lines.list
質問に表示される4つの数字を含むファイルが与えられると、sed
スクリプトが生成されます。
1s///g
30s///g
35s///g
90s///g
s///g
各行の末尾に追加するだけです。スラッシュエスケープを防ぐために、スクリプトのs
コマンドは:
代替区切り文字として使用されます。
このスクリプトを実行するには、以下を使用する必要がありますsed -f
。
sed 's:$:s///g:' lines.list | sed -i -f /dev/stdin file_to_modify
これにより、前に示したようにスクリプトが生成され、次のsed
項目に適用されますfile_to_modify
。-i
sed
sed
しかし、スクリプト自体を編集することはあまり意味がないことに注意してください。置換コマンドを含む空の正規表現は、最近一致した正規表現を再利用します。スクリプトにそのような式がないため、最初のs
コマンドが実行されますsed
。
答え2
私は何をしますか?
sed -E "s:[0-9]+:sed -i '&s///g' file_to_modify:" file
出力
sed -i '1s///g' file_to_modify
sed -i '30s///g' file_to_modify
sed -i '35s///g' file_to_modify
sed -i '90s///g' file_to_modif
または単一通貨で結合
sed -E 's:[0-9]+:&s///g:' file |
paste -sd ';' |
sed "s:.*:sed -i '&' file_to_modify:"
sed -i '1s///g;30s///g;35s///g;90s///g' file_to_modify