什么是;";s///命令的修饰符在GNU sed中的意思是什么?

什么是;";s///命令的修饰符在GNU sed中的意思是什么?,sed,Sed,我已经阅读了s//命令的手册。上面写着: e 此命令允许将shell命令中的输入导入到模式中 空间如果进行了替换,则在中找到的命令 执行模式空间,并用其输出替换模式空间。 抑制尾随换行符;如果命令 要执行的包含nul字符。这是一个基于GNU的扩展 我不知道什么有用: echo "1234" | sed 's/1/echo ss/e' echo "1234" | sed 's/1/ss/' 这两个命令的结果相同,因此e修饰符是关于什么的?该/e选项是GNUsed扩展。它使替换的结果作为命令传递给

我已经阅读了
s//
命令的手册。上面写着:

e

此命令允许将shell命令中的输入导入到模式中 空间如果进行了替换,则在中找到的命令 执行模式空间,并用其输出替换模式空间。 抑制尾随换行符;如果命令 要执行的包含nul字符。这是一个基于GNU的扩展

我不知道什么有用:

echo "1234" | sed 's/1/echo ss/e'
echo "1234" | sed 's/1/ss/'

这两个命令的结果相同,因此
e
修饰符是关于什么的?

/e
选项是GNU
sed
扩展。它使替换的结果作为命令传递给shell进行评估。注意:

vnix$ sed 's/a/pwd/' <<<a
pwd

vnix$ sed 's/a/pwd/e' <<<a
/home/tripleee
vnix$sed's/a/pwd/'
此
printf
命令在三行上回显三个4位数字。
sed
脚本将每一行分割成一对两位数,创建一个命令
echo$((12*34))
,例如,运行该命令,输出(408表示给定值)包含在(as)图案空间中,然后打印该图案空间。因此,对于这个脚本,将两个数字对相乘,并显示结果

如果您愿意,您可以选择更高级的:

$ printf "%s\n" 1234 2345 3456 |
> sed -e 's/\(..\)\(..\)/echo \1 \\* \2 = $((\1 * \2))/e'
12 * 34 = 408
23 * 45 = 1035
34 * 56 = 1904
$
注意双反斜杠-这相当重要。使用双引号可以避免这种情况:

printf "%s\n" 1234 2345 3456 |
sed -e 's/\(..\)\(..\)/echo "\1 * \2 = $((\1 * \2))"/e'

注意:每当
s//
命令实际进行替换时,符号将运行外部命令。如果文件中有数百万行数据,这可能意味着执行了数百万条命令。

我建议将
/echo
替换为
/touch
,并查看
ls-ltr
printf "%s\n" 1234 2345 3456 |
sed -e 's/\(..\)\(..\)/echo "\1 * \2 = $((\1 * \2))"/e'