【问题标题】:Piping sed to cat via xargs?通过 xargs 管道 sed 到 cat?
【发布时间】:2012-03-02 14:14:55
【问题描述】:

我有三个这样的文件:

haeder
line

我写这个:

sed '1,1d' */*filename*.txt | xarg cat > crap4.txt

并期待这个:

line
line
line

但我得到“猫:行:没有这样的文件或目录”......

【问题讨论】:

    标签: bash sed cat


    【解决方案1】:

    这可能对你有用(GNU sed):

    sed -s '1d' */*filename*.txt > crap4.txt
    

    -s 开关将每个文件分开处理,而不是默认的作为一个连续的流。

    【讨论】:

      【解决方案2】:

      那是因为 sed 正在发送那些编辑过的文件的内容。 cat 获取的第一个参数是编辑文件的第一行。

      你想的太复杂了

      sed '1,1d' */*filename*.txt > crap4.txt
      

      【讨论】:

      • 我将文件 2 和 3 中的“标题”放入 crap4.txt。
      【解决方案3】:

      这是对 cat 的无用用法(由 Randal Schwartz 定义)。使用普通重定向有效。如果你真的想使用 cat,你会想要删除 'xargs' 并使用 '-' 作为 cat 的参数。这是一个打印 /etc/hosts 中所有名称的示例

      myhost> awk '{print $NF}' /etc/hosts | cat -
      localhost
      myhost
      
      hosts
      ip6-loopback
      ip6-localnet
      ip6-mcastprefix
      ip6-allnodes
      ip6-allrouters
      ip6-allhosts
      

      但是使用“>”代替“猫”可能是您最好的选择。

      【讨论】:

      • "awk '{(getline); print $NF}' filename.txt | cat > crap.txt" 有效
      【解决方案4】:

      这是完美的工作:

      array=(*somestring*.txt)
      for i in {0..2}; do
      sed '1d' ${array[$i]} >> crap4.txt;
      done
      

      扑救。

      感谢您的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-18
        • 1970-01-01
        • 2021-01-06
        • 1970-01-01
        • 2019-08-24
        • 2019-01-15
        • 1970-01-01
        • 2015-10-08
        相关资源
        最近更新 更多