拆分线路,并使用sed在每条新线路上运行
我希望在不使用bash的情况下执行此操作,即不将一个拆分线路,并使用sed在每条新线路上运行,sed,Sed,我希望在不使用bash的情况下执行此操作,即不将一个sed命令的输出管道化到另一个命令中 是否可以使用sed(例如在给定字符处)拆分行,然后在每个新创建的行上独立执行下一个sed命令 换句话说,我可以在模式空间中以多行内容结束一个循环,然后为每一行开始一个新的循环吗?我相信D命令会有所帮助:它从模式空间中删除“最新”行(最底部),然后在不读取输入行的情况下开始新的循环 示例: 给定此文件“thing.txt”: 我在“-”处拆分行,然后在每一行上执行我的工作 这样做很简单:sed's/-/\n/
sed
命令的输出管道化到另一个命令中
是否可以使用sed
(例如在给定字符处)拆分行,然后在每个新创建的行上独立执行下一个sed命令
换句话说,我可以在模式空间中以多行内容结束一个循环,然后为每一行开始一个新的循环吗?我相信D
命令会有所帮助:它从模式空间中删除“最新”行(最底部),然后在不读取输入行的情况下开始新的循环
示例:
给定此文件“thing.txt”:
我在“-
”处拆分行,然后在每一行上执行我的工作
这样做很简单:sed's/-/\n/g'| sed's/^.*$/Hey/'thing.txt
,它会在每个生成的行中输出一个“Hey”:
我可以在单个sed脚本中实现这一点吗
[编辑]
上面的例子不是最好的,所以我想做的就是:
我有一个包含代码的文件,我只想对未注释的部分执行替换。因此,我应该在每一行上执行以下循环:
#
开头,则跳过# bla
echo bla # say bla
exit
我只想在未注释时用bla替换bla:
结果应该是
# bla
echo BLA # say bla
exit
或
这很容易使用:sed-r的/(.+)(#.$)/\1\n\2/“infle | sed”/^#/!{s/bla/bla/g}'
尝试以下方法(在GNU sed中测试),如果这对您有帮助,请告诉我
sed 's/[^-]*/Hey/g;s/-/\n/g' Input_file
请尝试以下(在GNU sed中测试)并让我知道这是否对您有帮助
sed 's/[^-]*/Hey/g;s/-/\n/g' Input_file
你可以这样试试
sed '/#/s//\n#/;tA;s/\bbla/BLA/;b;:A;s/\(.*\)\(\bbla\)\(.*\n.*\)/\1BLA\3/;tA;s/\n//' infile
你可以这样试试
sed '/#/s//\n#/;tA;s/\bbla/BLA/;b;:A;s/\(.*\)\(\bbla\)\(.*\n.*\)/\1BLA\3/;tA;s/\n//' infile
输出
# bla
echo BLA # say bla
exit
是否需要进行sed
perl -ne '
@parts = split /#/;
$parts[0] =~ s/(bla)/uc $1/ge;
print join "#", @parts
' file
或
输出
# bla
echo BLA # say bla
exit
是否需要进行sed
perl -ne '
@parts = split /#/;
$parts[0] =~ s/(bla)/uc $1/ge;
print join "#", @parts
' file
或
这可能适用于您(GNU-sed):
如果一条线不包含中间线,请退出。否则,在第一个#
之前插入一个换行符,并将该行复制到保留空间(HS)。模式空间(PS)中的大写字母allbla
,然后附加HS中的原始行。删除两行中不需要的部分并打印结果
可以在#
上拆分该行,以便:
sed 's/\([^#]\)#/\1\n#/;T;h;s/bla/\U&/g;G;s/\n.*\n.*\n//;s/#/\n#/' file
这可能适用于您(GNU-sed):
如果一条线不包含中间线,请退出。否则,在第一个#
之前插入一个换行符,并将该行复制到保留空间(HS)。模式空间(PS)中的大写字母allbla
,然后附加HS中的原始行。删除两行中不需要的部分并打印结果
可以在#
上拆分该行,以便:
sed 's/\([^#]\)#/\1\n#/;T;h;s/bla/\U&/g;G;s/\n.*\n.*\n//;s/#/\n#/' file
嗯,我同意它在这种情况下是有效的,它相当于
sed的/-/\n/g;s/^.*$/hey/gM;='thing.txt(使用多行替换模式),但这并不适用于其他情况。我将编辑我的问题以使其更清楚,对此我深表歉意。@PlasmaBinturong,当然请编辑您的问题并让我们更清楚地知道,那么我也会相应地编辑我的答案。嗯,我同意在这种情况下它是有效的,它相当于sed的/-/\n/g;s/^.*$/hey/gM;='thing.txt(使用多行替换模式),但这并不适用于其他情况。我将编辑我的问题以使其更清楚,对此我深表歉意。@PlasmaBinturong,当然请编辑您的问题并让我们更清楚地知道,我也将相应地编辑我的答案。糟糕。不喜欢复杂的sed程序。哇,太棒了!是的,很抱歉坚持使用sed,我想更好地理解它迷人的语法。这很有帮助!是的,这有助于理解“迷人的语法”,但我想我会使用您的双sed调用-更容易理解-也更容易执行该调用,例如,用于行拆分的awk(由于印刷错误-应该有一个换行符),然后使用sed编辑有格式错误的文本。恶心。不喜欢复杂的sed程序。哇,太棒了!是的,很抱歉坚持使用sed,我想更好地理解它迷人的语法。这很有帮助!是的,有助于理解“迷人的语法”,但我想我会使用您的双sed调用-更容易理解-也更容易执行该调用,例如,行拆分的awk(由于印刷错误-应该有一个换行),然后使用sed编辑有格式错误的文本。看起来它只会大写找到的第一个bla。看起来它只会大写找到的第一个bla。
sed 's/\([^#]\)#/\1\n#/;T;h;s/bla/\U&/g;G;s/\n.*\n.*\n//;s/#/\n#/' file