[英]sed command to add a line after some pattern
我有一個文件(內容如下)
name = [
"victor",
"linda",
"harris",
"sandy"
]
現在如何添加命令(使用 sed 或 awk 的 shell),我需要以下輸出
name = [
"NEW INPUT HERE",
"victor",
"linda",
"harris",
"sandy"
]
我嘗試了多種方法,但無法實現。 我試過的很少 sed '2a'$'\n'' "NEW INPUT HERE", ' filename
我可以添加它,但在我輸入后沒有換行
有些sed
很挑剔,但以下每個都應該工作:
$ sed -e '1a\
"NEW INPUT HERE",
' input-file
$ sed -e $'1a\\\n "NEW INPUT HERE",\n' input-file # Bashism
使用 GNU sed 為我工作:
sed '2i\ "NEW INPUT HERE",'
或者
sed '1a\ "NEW INPUT HERE",'
這將僅用於新行,無論您已經對現有的第二行使用了什么縮進:
$ awk -v new='"NEW INPUT HERE",' 'NR==2{orig=$0; sub(/[^[:space:]].*/,""); print $0 new; $0=orig} 1' file
name = [
"NEW INPUT HERE",
"victor",
"linda",
"harris",
"sandy"
]
使用sed
$ sed '2{h;s/[[:alpha:]][^"]*/NEW INPUT HERE/};2G' input_file
name = [
"NEW INPUT HERE",
"victor",
"linda",
"harris",
"sandy"
]
另一種選擇是匹配[
和下一行。
然后捕獲第 1 組中的換行符和前導空格。
在替換中,使用雙引號括起來的文本和對第 1 組的反向引用以保持縮進相同。
sed -E '/\[/{N;/(\n[[:blank:]]+)/{s//\1"NEW INPUT HERE",\1/}}' file
輸出
name = [
"NEW INPUT HERE",
"victor",
"linda",
"harris",
"sandy"
]
這可能對您有用(GNU sed):
sed '2{h;s/\S.*/"NEW INPUT HERE",/p;g}' file
在第 2 行,復制該行,從現有文本開始縮進的地方替換所需的字符串,打印修改后的行並恢復原始行。
使用正則表達式作為地址行的另一種解決方案:
sed '/name = \[/{n;h;s/\S.*/"NEW INPUT HERE",/p;g}' file
awk -v str='"NEW INPUT HERE",' '
/name/{
print;
getline; # get first element (victor)
le=length($0)-length($1); # calculate first element ident
printf "%*s%s \n%s\n", le, " ", str, $0;
next
}1' file
name = [
"NEW INPUT HERE",
"victor",
"linda",
"harris",
"sandy"
]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.