我有一个具有以下格式的文件:
Whatever1
Whatever2
Whatever3
binaries=(
text1
bin2
ohhh3
)
Whatever4
Whatever5
Whatever6
我需要用命令输出binaries=(
替换任何内部行。)
我可以使用如下命令选择以下块sed -n -e '/binaries=(/,/)/p' filename
:
binaries=(
text1
bin2
ohhh3
)
或者用这个更好awk '/binaries/,/)/{if(!/binaries|)/)print}' filename
:
text1
bin2
ohhh3
但是,我必须重写原始文件,而且我不知道如何继续。
答案1
使用 GNU sed
:
sed '/binaries=(/,/)/{
//!d
/)/e uname
}'
替换uname
为您的命令。
答案2
我会用 awk 来做,例如:
awk '
f && /)/ { f=0 }
!f
!f && /binaries=\(/ { f=1 ; p=1 }
p { system ("your_command") ; p=0 }
'
其中“your_command”将定义替换。
说明:该标志f
将控制状态机;如果已设置,则您位于应被替换的块中。随着开始和结束模式的匹配,标志会相应地改变。当你在块中时,系统调用将被执行;该标志p
仅用于打印一次。
要替换原始文件,请创建一个新文件,然后覆盖原始文件,或者使用awk
带有选项的最新版本的 GNU -i inplace
。