天天看點

關于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
           

如果以後用到更複雜的再更新吧。