【问题标题】:bash append text at the start and end of ls outputbash 在 ls 输出的开头和结尾附加文本
【发布时间】:2019-01-23 04:47:40
【问题描述】:

我想改变 ls 的输出:

1.png
2.png
3.png

进入

Start [1.png] End
Start [2.png] End
Start [3.png] End

我需要同时在一行的开头和结尾附加一个字符串。 我不反对使用文本文件来存储输出,但是如果有更好的方法,我会避免使用它。

我知道我可以使用

ls | sed 's/^/Start [/'

ls | sed 's/$/] End/'

但是有没有办法将这 2 个操作组合成 1 个语句?并避免使用临时文本文件?

【问题讨论】:

  • sed 's/[0-9]*\.png/Start [&] End/'?
  • 不如@WiktorStribiżew 优雅,但更接近您的代码:ls | sed 's/^/Start [/' | sed 's/$/] End/'

标签: unix sed append ls


【解决方案1】:
ls | sed 's/^/Start [/' | sed 's/$/] End/'

通过实验发现自己。

【讨论】:

  • 对于这种情况,您也可以使用sed 's/.*/Start [&] End/'。另请参阅Why not parse ls?
【解决方案2】:

使用sed

sed  's/^/start [ /;s/$/ ] end/' 
start [ 1.png ] end
start [ 2.png ] end
start [ 3.png ] end

【讨论】:

    【解决方案3】:

    请您尝试关注一下。

    ls | awk '{print "start [" $0 "] END"}'
    

    ls | sed 's/^/start \[/;s/$/\] end/'
    

    【讨论】:

    • 你缺少括号
    • @gogaz,现在肯定做到了,非常感谢您的告知。
    【解决方案4】:

    我发现使用xargs 更容易,尝试一下:

    $ xargs < <(ls) -I@ echo "start [ @ ] END"
    

    -I@ 将有助于将@ 用作占位符,因此您可以使用echo "start [ @ ] END@ 将替换为ls 的输出

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-20
      • 1970-01-01
      • 2020-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多