Sed:查找、替换并将结果附加到原始行
我在Mac上,我想在行中找到一个模式,用某物替换它,然后将结果字符串附加到原始行的末尾。以下是我尝试过的:Sed:查找、替换并将结果附加到原始行,sed,replace,append,Sed,Replace,Append,我在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]/
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'='
您可以通过以下方式编辑此命令:
echo "test='123'" | sed -E 'h;s/([a-zA-Z0-9])//g;G;s/(.*)\n(.*)/\2\1/'
为了可读性,脚本逐行读取
h
s/([a-zA-Z0-9])//g
G
s/(.*)\n(.*)/\2\1/
将当前行存储在保留空间中h
- 您的
命令执行它的功能s
将保留空间的内容(即原始行)附加到图案空间(即编辑后的当前行),并在中间添加新行G
\n
- 另一个
命令对这两个部分重新排序,同时删除插入s
命令的G
\n
- 您最初的尝试
无法工作,因为sed-E'/([^a-z])/s/$/\1/'
引用了\1
命令的搜索部分中最左边的s
组捕获的内容,它无法“记住”您用来寻址该行的组(…)
- 使用
打印图案空间后,会出现一条换行符,一旦打印出来,就无法在同一p
程序中删除它sed
sed-E'/\([^a-zA-Z=][^a-zA-Z=]*\)/s/$/&/'
?不确定行匹配中的\(-grouping运算符--\)
是否会转入s/regex/repl/
部分。我会将\(\)
移动到s/regex/repl/
部分。祝你好运。对不起,我显然不清楚。我需要在行中找到一个字符串,并用某物替换它(例如,用空格)。结果将是新字符串。但是我需要将这个新字符串附加到原始行。我可能需要编辑我的初始代码以使其更清晰。口头描述常常模棱两可。最好在之前
和之后
显示您需要的内容(使用示例数据)。祝你好运。在之前添加了,在
之后添加了,echo“test='123'”sed“s/$/=''/g”
将生成您请求的输出。是,将在s
之前添加/test='123/
,因此只有这些行将被编辑,其他所有行将被打印而不作更改。祝你好运