2016-05-02 13 views
0

パターンの最初の一致後にファイル内の既存の行に文字列を挿入するsedまたはawkソリューションを探しています。私たちは、「コマンド」に一致する場合は、「コマンド」の最初の発生時にのみ一致させる必要があるだろうawkまたはsed:一致後に既存の行にパターンを追加

command "new string here" arg arg2 another string and another string and so on 

をこのように見て

command arg arg2 -o another string and another string and so on 

:たとえば、私はこれを必要とします。

私は、実際の行が非常に長いので、行全体を使用しないことをお勧めします。 (そして、私が修正する必要がある複数の行があります。)ファイル内に新しい行を追加したり、行末や行頭に文字列を追加するのにsedやawkを使用することについて無数の解決策を見出しましたが、私はここでやる必要があるように、行の途中に挿入する。

+0

おっとを印刷し、あなたはあなたのコードを投稿するのを忘れました! StackOverflowは、人々がコードを修正する手助けをしています。無料のコーディングサービスではありません。どのコードもコードなしより優れています。たとえあなたがそれを書く方法を知らなくても、プログラムがうまくいくと思っていることをメタコードが示してくれます。 – ghoti

答えて

1

あなたはawkのとそれを達成することができます:

awk '$1 ~ /command/ { s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print $1 " " "new string here" " " s }' 
+0

これは変更を完全に必要としますが、私のawkのバージョンのためにインプレースの変更を行うことができず、コピーをstdoutに送ることは変更を送信するだけです*ファイルの私はこれについて新しい質問を投稿する必要があります。 – user53029

+0

コマンドの最後に '> newfile.txt'を追加して' stdout'の出力をファイルにリダイレクトできます。 – taras

+0

それは動作しません。それでもファイルの他の内容は消去されます。私はファイル> newfileを使用しています。 – user53029

0

sedのバージョン:

sed -n 's/^\(command\)\(.*\)/\1 "new string here"\2/p' 
  • sが - ライン
  • ()の始まり -
  • ^に置き換えて - キャプチャグループ1
  • コマンド - リテラル文字列
  • () - キャプチャグループ2
  • * - 。ライン上の他のすべて
  • \ 1から1
  • "新しい文字列ここでは、" キャプチャグループの内容 - 文字列リテラル
  • \ 2 - キャプチャグループ2
  • pは - それ
関連する問題