天天看点

关于shell文本处理

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

  • 统计子目录下多个文件夹的行数

如果仅需要对单独文本

cat filename | wc -l

(会少一行,如果文件最后没有换行符)即可

  • 删除目录下所有文件的最后一行换行符,生成新的文件
  • 删除文件内每一行的最后一个内容

    mac下vim filename 进入,

    1,$s/.$//

    ,wq 保存即可(会多出换行符)
  • 判断两个文本的每一行是否相同
diff filename1 filename2
           
  • shell脚本没有执行权限(Permission denied)
chmod +x xxx.sh
           
  • 删除某一行

234d表示删除第234行

sed -e '234d' filename >> newFile 
           
  • 把不同文件夹下名字相同的文件写到一起(合并两个文件)

    进入当前目录下

  • 将目录下所有文件的特定行写入一个新的文件

    将所有文件的第1行的内容写入new.txt

for x in *;do
    num=
    cat $x | while read line;do
        num=$(($num+))

        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
           

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