亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
12下一頁
最近訪問板塊 發(fā)新帖
查看: 3376 | 回復: 11
打印 上一主題 下一主題

[文件目錄] 一個困惑我了很久的問題,請各位大神幫我看看【已完美解決】 [復制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2015-11-02 18:26 |只看該作者 |倒序瀏覽
本帖最后由 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中會被展開,導致會出錯,所以放棄了這個思路。

請各位大神幫忙看看這個問題如何解決?

論壇徽章:
0
2 [報告]
發(fā)表于 2015-11-02 18:36 |只看該作者
在線等各位大神的指導   

論壇徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉雞
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥豬
日期:2014-04-22 16:13:09獅子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53處女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
3 [報告]
發(fā)表于 2015-11-02 19:12 |只看該作者
回復 1# junhengwoo

grep -r "steven" *
不能達到你的要求嗎?

   

論壇徽章:
0
4 [報告]
發(fā)表于 2015-11-02 19:38 |只看該作者
謝謝  
你的這個方式很好,不過我要找的范圍很大(比如從根目錄去找),所以首先要把文本類型的文件給過濾出來,縮小要查找的范圍,這樣使用grep去搜索的效率會高一些。

回復 3# Herowinter


   

論壇徽章:
0
5 [報告]
發(fā)表于 2015-11-02 20:15 |只看該作者
我現(xiàn)在把管道給拆了,查到的文件信息放到一個臨時文件里,然后對文件進行處理,可以達到目的,但是這種方式有些丑陋了,最后還留下了一個臨時文件沒有刪掉。
jack@Ubuntu:~/temp9$ alias findt='find ./ -type f 2>/dev/null | xargs file   2>/dev/null | grep ASCII > temp.txt; while read LINE; do n=`echo $LINE | grep -o : | wc -l`; echo $LINE | cut -d :  -f 1-$n; done <temp.txt | xargs grep -H '
jack@Ubuntu:~/temp9$ findt steven
./temp/cc:dd:steven, you are so nice.
junheng.wu@Tizen-PVR:~/temp9$

應該還有更好的解決方案

論壇徽章:
84
每日論壇發(fā)貼之星
日期:2015-12-29 06:20:00每日論壇發(fā)貼之星
日期:2016-01-16 06:20:00每周論壇發(fā)貼之星
日期:2016-01-17 22:22:00程序設計版塊每日發(fā)帖之星
日期:2016-01-20 06:20:00每日論壇發(fā)貼之星
日期:2016-01-20 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-01-21 06:20:00每日論壇發(fā)貼之星
日期:2016-01-21 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-01-23 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-01-31 06:20:00數(shù)據(jù)庫技術版塊每日發(fā)帖之星
日期:2016-01-16 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-01-16 06:20:00程序設計版塊每日發(fā)帖之星
日期:2016-01-14 06:20:00
6 [報告]
發(fā)表于 2015-11-03 09:26 |只看該作者
復雜的寫成腳本 放 /usr/bin 或 /usr/local/bin 或 ~/bin 下面,別用alias了

論壇徽章:
1
摩羯座
日期:2014-12-29 15:59:36
7 [報告]
發(fā)表于 2015-11-03 13:59 |只看該作者
Bash manual 說了:能用函數(shù)盡量用函數(shù),不要用別名

論壇徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亞冠之浦和紅鉆
日期:2015-06-23 19:10:532015亞冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16賽季CBA聯(lián)賽之山東
日期:2016-01-31 18:25:0515-16賽季CBA聯(lián)賽之四川
日期:2016-02-16 16:08:30程序設計版塊每日發(fā)帖之星
日期:2016-06-29 06:20:002017金雞報曉
日期:2017-01-10 15:19:5615-16賽季CBA聯(lián)賽之佛山
日期:2017-02-27 20:41:19
8 [報告]
發(fā)表于 2015-11-05 08:24 |只看該作者
grep ASCII | cut -d ':' -f 1 變?yōu)?sed  -n 's/: ASCII text$//p'

論壇徽章:
0
9 [報告]
發(fā)表于 2015-11-10 09:14 |只看該作者
本帖最后由 lgfang 于 2015-11-10 09:15 編輯

我的file支持‘-F’ (如果你的file也支持只是你沒查手冊的話,建議養(yǎng)成遇到問題先查手冊的習慣)。
  1.      -F, --separator separator
  2.              Use the specified string as the separator between the filename and the file result returned. Defaults to ‘:’.


  3. $ alias findt=" find ./ -type f 2>/dev/null | xargs file   2>/dev/null | grep ASCII | cut -d ':' -f 1 |  xargs grep "

  4. $ findt

  5. $ findt aaaa
  6. grep: ./cc: No such file or directory

  7. $ alias findt=" find ./ -type f 2>/dev/null | xargs file -F '|'   2>/dev/null | grep ASCII | cut -d '|' -f 1 |  xargs grep "

  8. $ findt aaaa
  9. aaaaa
復制代碼

論壇徽章:
0
10 [報告]
發(fā)表于 2015-11-21 11:09 |只看該作者
回復 8# waker

謝謝waker哥的指點

按照這種方式,現(xiàn)在不報錯了,但結(jié)果跟我期望的不太一樣。
zxin10@ubuntu:~/temp2$ alias findt3=" find ./ -type f 2>/dev/null | xargs file   2>/dev/null | sed  -n 's/: ASCII text$//p' |  xargs grep "
zxin10@ubuntu:~/temp2$ findt3 steven
by,steven
zxin10@ubuntu:~/temp2$ findt2 steven
./a/b/c/BB:CC:hello, steven
./a/b/c/dd.txt:by,steven


   
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP