3

ファイル内の 2 行を新しい 1 行に置き換えようとしています。

foo1.txt
  aaa   aaa
  bbb   bbb
  ccc   ccc
  ddd   ddd
  bbb   bbb
  ddd   ddd

置換後、ファイルは次のようになります

foo1.txt
  aaa   aaa
  eee   eee
  ddd   ddd
  bbb   bbb
  ddd   ddd

sedまたは他のコマンドを使用して、フォルダーのすべてのファイルでこれを置き換える方法はありますか

私はsedを試してきましたが、成功しませんでした:sed 's/bbb\tbbb\nccc\tccc/eee\teee/g' foo*.txt

4

3 に答える 3

8

あなたの質問を解釈する方法はたくさんあります。2行目と3行目など、固定位置で行を置き換えようとしている場合は、次のようにします。

sed '2d; 3s/.*/newtext/'

一致する行と次の行を置き換える場合:

sed '/pattern/{ N; s/.*/newtext/; }'

2番目の行がパターンに一致する2つの連続する行を置き換えるには:

sed -n '$p; N; /pattern/d; P; D'
于 2012-09-11T12:40:20.857 に答える
1
nawk '{if($0~/bbb.*bbb/){getline;getline;print "newline"};print}' your_file

以下でテスト:

> cat temp
aaa   aaa
bbb   bbb
ccc   ccc
ddd   ddd
> nawk '{if($0~/bbb.*bbb/){getline;getline;print "newline"};print}' temp
aaa   aaa
newline
ddd   ddd
于 2012-09-11T13:02:18.343 に答える
1

この質問はこのスレッドで既に回答されているはずですが、「1行1コマンド」のソリューションを機能させることができませんでした。

このコマンド:

perl -pe 's/START.*STOP/replace_string/g' file_to_change

私にはうまくいかないようで、複数行の置換を実行しません。次のように、2 つの異なる perl スクリプトに分割する必要がありました。

perl -pe 's/bbb\tbbb\n.*/placeholderstring/g' foo1.txt | perl -pe 's/placeholderstring  ccc\tccc/eee\teee/g'

あなたに最適なものを見てみてください。

編集:

新しいサンプル テキストでは、有効な唯一の解決策はWilliam Pursellによるものです。

sed '/bbb\tbbb/{ N; s/.*ccc\tccc/  eee\teee/; }' foo1.txt
于 2012-09-11T13:03:18.520 に答える