- 論壇徽章:
- 0
|
本帖最后由 junhengwoo 于 2015-11-21 11:15 編輯
我喜歡把一些稍微復雜的操作組合成只有一行的命令,然后定義為別名,這樣想用的時候,通過使用這個別名再加上一些參數(shù)值,就能快速地完成一些功能。
問題是這樣的。
我想在當前目錄(以及所有的子目錄)下的所有文本文件中搜索一個指定的字符串,把包含這個字符串的行打印出來。
我當前的實現(xiàn)方式如下:
alias findt=" find ./ -type f 2>/dev/null | xargs file 2>/dev/null | grep ASCII | cut -d ':' -f 1 | xargs grep "
使用方式如下:
jack@Ubuntu:~/temp9$ findt "steven"
./temp/aaaaa:hi steven
./temp/bbbb:by steven
在文件名中沒有包含“:”字符時,那么結(jié)果是正常的。
如果文件名包含了“:”字符,那么這樣執(zhí)行就會出現(xiàn)錯誤。如下面的示例中是因為有文件名為“cc:dd”,導致出現(xiàn)下面的錯誤。
jack@Ubuntu:~/temp9$ findt "steven"
grep: ./temp/cc: No such file or directory
錯誤的原因,是因為在對“file 文件名”的操作結(jié)果通過cut的分隔符“:”來分割時提取的第一個域不是文件名,導致grep出錯。
我把這個操作中的一部分的執(zhí)行結(jié)果貼出來,這樣大家能好理解些。
jack@Ubuntu:~/temp9$ find ./ -type f 2>/dev/null | xargs file 2>/dev/null | grep ASCII
./temp/cc:dd: ASCII text
我也曾考慮過通過awk來解決這個問題,但是awk中的單引號和雙引號在alias中會被展開,導致會出錯,所以放棄了這個思路。
請各位大神幫忙看看這個問題如何解決? |
|