gpt4 book ai didi

shell - sed脚本中的空正则表达式

转载 作者:行者123 更新时间:2023-12-05 01:17:29 25 4
gpt4 key购买 nike

从著名的“sed one liners”中找到以下 sed 脚本来反转每行中的字符,我无法在脚本的 //D 中执行以下命令

sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

假设初始文件有两行开头 say,

apple
banana

在第一个命令之后,

/\n/!G

模式空间是,

apple

banana

[每行后引入新行。此处删除最后一行的代码标记。所以它没有显示]。在第二个命令之后,

s/\(.\)\(.*\n\)/&\2\1/

模式空间是,

apple
pple
a
banana
anana
b

这之后的第三个命令如何工作?另外,我明白empty regular expression(//)匹配先前匹配的正则表达式。但在这种情况下,那会是什么?\n 来自第一个命令或由第二个命令替换的正则表达式?任何帮助将非常感激。谢谢。

最佳答案

使用来自 my own comment above 的建议这是发生了什么:

/\n/!G 模式空间之后将是

apple¶
banana¶

s/\(.\)\(.*\n\)/&\2\1/ 模式空间之后将是

apple¶pple¶a
banana¶anana¶b

然后是 D 命令。来自 man sed:

   D      Delete  up  to  the first embedded newline in the pattern space.
Start next cycle, but skip reading from the input if there is
still data in the pattern space.

所以第一个单词和第一个 被删除。然后 sed 从第一条命令,但由于模式空间包含 模式 /\n/不匹配,不执行 G 指令。第二条命令导致

pple¶ple¶pa
anana¶nana¶ab

你能从那里继续吗?

关于shell - sed脚本中的空正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17136436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com