【问题标题】:How to remove from all files in folder the lines with specific string如何从文件夹中的所有文件中删除带有特定字符串的行
【发布时间】:2019-10-31 12:01:22
【问题描述】:

我正在寻找从文件中删除所有行的方法(对于文件夹中的所有文件)都有字符串 # 并复制文件名并将其添加为第一列(或最后一列):

例如我有:

# DX 
# DEPTH 
MD   DX  DY
100  23  35
100  23  35

输出应该是这样的,假设文件名为test2:

test2 MD   DX  DY
test2 100  23  35
test2 100  23  35

谢谢, S

【问题讨论】:

    标签: linux powershell shell


    【解决方案1】:

    利用简单的 bash 结构,遍历每个文件的每一行,将行和文件名保存为变量,然后在文件中的每一行,一起打印两个变量。

    for file in *; do
      for (( i = 1 ; i <= $( grep "" -c $file ) ; i++ ); do
        line=$( cat $file | head -n ${i} | tail -1 )
        echo "${file} ${line}"
      done
    done
    

    【讨论】:

      【解决方案2】:

      考虑使用 find/sed 为每个进程构建命令行。

      find * -type f | xargs -I@ sed -e '/#/d' -e 's/^/@ /' @
      

      以上将打印组合输出。如果需要修改文件,可以考虑使用内联编辑(sed -i)

      find * -type f | xargs -I@ sed -i -e '/#/d' -e 's/^/@ /' @
      

      【讨论】:

      • 感谢代码!!如何复制文件名并将其添加为第一列?
      • 输出已经包含文件名(在 Mint 19 上运行)作为第一列。你是只使用输出还是文件更新命令?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      • 2022-01-19
      • 1970-01-01
      • 2011-11-17
      • 2015-04-11
      相关资源
      最近更新 更多