Sed:查找、替换并将结果附加到原始行

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]/

我在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'='

您可以通过以下方式编辑此命令:

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/
,因此只有这些行将被编辑,其他所有行将被打印而不作更改。祝你好运