代码之家  ›  专栏  ›  技术社区  ›  JPV

grep的BASH输出

  •  0
  • JPV  · 技术社区  · 6 年前

    我对bash比较陌生,我正在为第一个案例测试我的代码。

    counter=1
    for file in not_processed/*.txt; do
      if [ $counter -le 1 ]; then
        grep -v '2018-07' $file > bis.txt;
        counter=$(($counter+1));
      fi;
    done
    

    我想从我的文件中减去所有包含“2018-07”的行新文件需要命名为$file_bis.txt。

    谢谢

    3 回复  |  直到 6 年前
        1
  •  2
  •   René Höhle Dyno Fu    6 年前

    sed awk 处理复杂文件要容易得多,也要快得多。

    sed -n '/2018-07/p' not_processed/*.txt
    

    然后在控制台中获得输出。如果需要,可以将输出管道化到新文件。

    sed -n '/2018-07/p' not_processed/*.txt >> out.txt
    
        2
  •  0
  •   dhany1024    6 年前

    这将在所有未处理的文件/*.txt中执行此操作

    for file in not_processed/*.txt
    do
      grep -v '2018-07' $file > "$file"_bis.txt
    done
    

    只对not_processed/*.txt中的前两个文件执行此操作

    for file in $(ls not_processed/*.txt|head -2)
    do
      grep -v '2018-07' $file > "$file"_bis.txt
    done
    

    不要忘记在$file上添加“”,否则bash会将$file_bis视为一个新变量,它没有赋值。

        3
  •  0
  •   Abhijit Pritam Dutta    6 年前

    我不明白你为什么要用柜台 if 这个简单要求的条件使用以下脚本来满足您的要求:

    #first store all the files in a variable
    files=$(ls /your/path/*.txt)
    # now use a for loop
    for file in $files;
    do
      grep '2018-07' $file >> bis.txt
    done
    

    最好避免这里的for循环,因为下面的单行就足够了

    grep -h '2018-07' /your/path/*.txt >  bis.txt