命令的每个输出行的前缀和后缀字符串

Spe*_*omb 24 grep bash shell-script

我在尝试编写 Bash 脚本时遇到了问题。当grep输出时,它返回(通常)多行。我想为每个输出行添加一个字符串的前缀和后缀。

我还想指出,我正在ls输入grep,例如:

ls | grep
Run Code Online (Sandbox Code Playgroud)

Cyr*_*rus 38

使用 sed:

ls | grep txt | sed 's/.*/prefix&suffix/'
Run Code Online (Sandbox Code Playgroud)

  • 或者,`sed` 是`grep` 的超集:`ls | sed -n '/txt/s/.*/prefix&suffix/p'` 或 `ls | sed -n 's/.*txt.*/prefix&suffix/p'` (3认同)

Sob*_*que 8

sed

ls | grep pattern | sed -e 's/^/prefix/' -e 's/$/suffix/'
Run Code Online (Sandbox Code Playgroud)

但是请注意,这会受到带有换行符的文件名的问题,以及解析的所有各种问题,ls这通常是一个坏主意。

用 perl

perl -e 'print "prefix".$_."suffix\n" for grep { m/somepattern/} glob "*"'
Run Code Online (Sandbox Code Playgroud)

注意 - perlgrep可以采用模式 - 就像grep命令一样,但您也可以执行诸如应用文件测试之类的操作。

例如

grep {-d} glob "*" #filters directories.
grep { (stat)[9] > time() - 60 } glob "*" #reads file mtime and compares. 
Run Code Online (Sandbox Code Playgroud)

grep默认迭代器$_内设置为当前元素值,因此您可以应用sed/grep样式正则表达式,或基于$_.