2016-05-02 113 views
0

我正在尋找一個sed或awk解決方案,它將在模式的第一次匹配之後將字符串插入文件中的現有行。例如,我需要這樣的:awk或sed:匹配後追加模式到現有行

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

看起來像這樣:

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

如果我們匹配「命令」那就只需要匹配「命令」中第一次出現。

我不想使用整行sed替代解決方案,因爲實際行很長。 (並且需要修改多行)。我遇到過無數使用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

您可以將'stdout'的輸出重定向到文件,並在命令末尾附加'> newfile.txt'。 – taras

+0

這不起作用。它仍會擦除文件的其他內容。我正在使用<我的awk腳本>文件> newfile。 – user53029

0

SED版本:

sed -n 's/^\(command\)\(.*\)/\1 "new string here"\2/p' 
  • 秒 - 替代
  • ^- 起跑線
  • ()的 - 捕獲組1
  • 命令 - 文字字符串
  • () - 捕獲組2
  • * - 就行了一切
  • \ 1 - 捕獲組1
  • 「新的字符串這裏」 的內容 - 文字字符串
  • \ 2 - 捕獲組2
  • p - 打印它