关于shell文本处理

最近用做了一些处理文本的工作,发现shell真的比较方便,总结了一些小代码。

  • 统计子目录下多个文件夹的行数
for x in *.txt;do cat $x | wc -l; done

如果仅需要对单独文本 cat filename | wc -l (会少一行,如果文件最后没有换行符)即可

  • 删除目录下所有文件的最后一行换行符,生成新的文件
for x in *.txt;do  cat $x | perl -pe 'chomp if eof'  >> ../new/$x; done
  • 删除文件内每一行的最后一个内容
    mac下vim filename 进入,1,$s/.$// ,wq 保存即可(会多出换行符)
  • 判断两个文本的每一行是否相同
diff filename1 filename2
  • shell脚本没有执行权限(Permission denied)
chmod +x xxx.sh
  • 删除某一行

234d表示删除第234行

sed -e '234d' filename >> newFile 
  • 把不同文件夹下名字相同的文件写到一起(合并两个文件)
    进入当前目录下
for x in *.txt; cat $x >> ../newfold/$x; done
  • 将目录下所有文件的特定行写入一个新的文件
    将所有文件的第1行的内容写入new.txt
for x in *;do
    num=0
    cat $x | while read line;do
        num=$(($num+1))

        if [[ $num == 1 ]]; then
            echo $x >> ../new.txt
        fi
    done
done
  • 将目录下行数不符合要求的文件找出来
    若文本不是4261行,移出这些文件
for x in *.txt;do
    num=`cat $x | wc -l`
    if [[ $num -ne 4261 ]]; then
        echo $num
        mv $x ../wrong/
    fi
done

如果以后用到更复杂的再更新吧。

你可能感兴趣的:(实践代码,shell,文本处理,mac)