我有如下文件的内容:
data {
x = "name",
y = "job"
z = "role"
}
当它丢失时,我想在花括号前面添加=,否则忽略它
输出应为:
data = {
x = "name",
y = "job"
z = "role"
}
我试过了,但没用。sed -r -ie 's|data { | data = {|g' abc.txt
有人能告诉我做错了什么吗?
感谢
您可以使用
sed -r -i 's|(data)[[:space:]]*({)|1 = 2|g' abc.txt
sed -i 's|data[[:space:]]*{|data = {|g' abc.txt
详细信息:
-r
(或-E
(选项启用POSIX ERE regex语法(data)[[:space:]]*({)
-将data
匹配并捕获到组1中,[[:space:]]*
匹配任何零个或多个空白,({)
将{
字符捕获到组2中1 = 2
—替换为第1组值、空格、=
、空格和第2组值
查看在线演示。
注意:如果需要确保图案与整条线匹配,请添加锚点^
和$
:
's|^(data)[[:space:]]*({)$|1 = 2|g'
在GNU sed中,您可以使用[[:spaces:]]*
、s*
的较短形式:
's|^(data)s*({)$|1 = 2|'
如果可能有前导/尾随空白,并且需要保持使用:
's|^(s*data)s*({s*)$|1 = 2|'
sed '/=/!s/data /&= /' abc.txt
在没有等号的行上,将data+空格替换为data+空格+equal+空格。