sed:'//D';命令
我在努力理解sed:'//D';命令,sed,Sed,我在努力理解 $ echo "reverse me" \ | sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' em esrever ()。 但是我没法得到那份工作 //D 指挥部。 在移除// /\n/!{ G } s/\(.\)\(.*\n\)/&\2\1/ D s/.// 它不工作(似乎是一个循环) 我在手册页或sed faq上找不到有关//地址的任何信息(有时会用到它,但没有解释) 如有任何帮助,将不胜感激。在此页面:
$ echo "reverse me" \
| sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
em esrever
()。
但是我没法得到那份工作
//D
指挥部。
在移除//
/\n/!{
G
}
s/\(.\)\(.*\n\)/&\2\1/
D
s/.//
它不工作(似乎是一个循环)
我在手册页或sed faq上找不到有关//地址的任何信息(有时会用到它,但没有解释)
如有任何帮助,将不胜感激。在此页面:
搜索此行:
37. Reverse a line (emulates "rev" Unix command)
从see手册页:
[2addr]D
通过删除阵列空间的初始段
第一个换行符并开始下一个循环
您可以在sed中省略模式的内容,并将其命名为
/
,这意味着将其视为与上次使用的正则表达式相同。通过删除它,您可以将模式匹配时删除更改为始终删除 这可能适合您:
echo reverse me | sed '/\n/!G;l;s/\(.\)\(.*\n\)/&\2\1/;l;//D;s/.//'
reverse me\n$
reverse me\neverse me\nr$
everse me\nr$
everse me\nverse me\ner$
verse me\ner$
verse me\nerse me\nver$
erse me\nver$
erse me\nrse me\never$
rse me\never$
rse me\nse me\nrever$
se me\nrever$
se me\ne me\nsrever$
e me\nsrever$
e me\n me\nesrever$
me\nesrever$
me\nme\n esrever$
me\n esrever$
me\ne\nm esrever$
e\nm esrever$
e\n\nem esrever$
\nem esrever$
\nem esrever$
em esrever
在替换命令之前和之后,我添加了两个l
命令
sed命令的工作原理如下:
/\n/!G
\(.\)
(AKA\1
)分组,然后将所有字符分组到第一个换行符\(.\n\)
(AKA\2
)中,然后用整个匹配的&
和\2\1
替换这两个组/D
后上一个regexp为真,则删除到第一个换行符,即删除上一个&
表达式并开始一个新循环,但不读取新行。有效地循环,直到regexp失败s//
谢谢,所以
/
匹配最后一个regexp。这正是我想要的。现在我明白了。