【发布时间】:2020-07-31 13:14:42
【问题描述】:
我在 Mac 上,我想在行中找到一个模式,用一些东西替换它,然后将结果字符串附加到原始行的末尾。这是我尝试过的:
echo "test='123'" | sed -E '/([^a-z])/ s/$/ \1/'
sed: 1: "/([^a-z])/ s/$/ \1/": \1 not defined in the RE
我需要定义什么\1?我以为我是用([^a-z]) 做到的。没有?
编辑:也许这段代码会更好地代表我想要的:
1) echo "test='123'" | sed 's/[a-zA-Z0-9]//g'
2) 我想要新行 = 原行 + 上面的第 1 行
换句话说:
之前(我得到的):test='123'
之后(我想要的):test='123' =''
【问题讨论】:
-
不确定你想得到什么,但如果我猜对了,试试
sed -E '/\([^a-zA-Z=][^a-zA-Z=]*\)/ s/$/ &/'?不确定行匹配中的\(--grouping operator--\)是否会延续到s/regex/repl/部分。我会将\( \)移动到s/regex/repl/部分。祝你好运。 -
对不起,我显然不清楚。我需要在该行中找到一个字符串并将其替换为某些内容(例如,用空格)。结果将是新字符串。但随后我需要将此新字符串附加到原始行。我可能需要编辑我的初始代码以使其更清晰。
-
口头描述通常是模棱两可的。最好完全按照您的需要显示
before和after(带有示例数据)。祝你好运。 -
添加了
before和after -
echo "test='123'" | sed "s/$/ =''/g"产生您请求的输出。是的,在s之前添加/test='123/将只编辑那些行,而所有其他行将不加更改地打印。祝你好运。