grepping字符串我使用下面的代碼grep
一些字符串後如何解壓文件名:在特定的文件在UNIX
grep 'string' *.log | grep -v 'string1'
我得到的輸出。我的要求是將該文件名提取到一個變量。我如何有效地做到這一點?
grepping字符串我使用下面的代碼grep
一些字符串後如何解壓文件名:在特定的文件在UNIX
grep 'string' *.log | grep -v 'string1'
我得到的輸出。我的要求是將該文件名提取到一個變量。我如何有效地做到這一點?
在一般情況下,你可以通過命令替換捕捉任何命令的輸出到一個shell變量是這樣的:
variable=$(command arg1 arg2)
此,如果你確信會有適合您的具體情況只有一個管道生成的grep
文件名。在這種情況下,你捕捉它的名字到shell變量fname
通過:
fname=$(grep -lZ string *.log | xargs -0 grep -lv string1)
這是困難的文件名安全的,因爲,通過-Z
和-0
選項,我們使用NUL分隔的列表。 -l
選項到grep
在此處非常有用,因爲它可以抑制正常的grep
輸出並僅顯示文件名。
如果可能有多個文件匹配,那麼,如果你可以使用一個先進的殼像bash
,嘗試:
grep -lZ string *.log | xargs -0 grep -lvZ string1 | while IFS= read -r -d $'\0' fname
do
# Process file "$fname"
done
這也是安全的困難文件名,因爲,整個管道,它使用NUL - 分離列表。
對於POSIX shell,read
使用換行符分隔輸入。爲了使上面的文件名難以安全,使用-d
選項,該選項由bash
,zsh
和其他高級shell支持。
也許你應該告訴哪個shell支持'read'功能 – 2015-04-02 06:47:49
@MichaelGrünewald好點,我提到POSIX不支持'read- d',但'bash'和'zsh'(可能還有其他的shell,但我不熟悉它們)。 – John1024 2015-04-02 06:57:56
使用命令
名前綴 「文件路徑」, 「fileExtension」
例如:基名/home/john/xyz.txt .TXT
輸出:XYZ
不知道你到底需要,但你試過這個嗎? 'testfilename =「someFilename.txt」; echo「$ {testfilename%。*}' 這將返回字符串'someFilename'(沒有擴展名) – 2015-04-02 06:30:28
如果glob中只有一個文件,grep將不會打印文件名。打印是'grep -H'和'grep模式文件/ dev/null' – 2015-04-02 12:11:51