2012-01-09 88 views
3

所以這個命令會在tmp目錄與XYZ代替ABC在file.txt的在多個文件中查找並替換SSH命令?

SED - 即 'S/ABC/XYZ/G' /tmp/file.txt

你如何在一個帶有.html擴展名的目錄中的大量文件中一次性找到並替換這樣的文件?

+0

'男人如此rules'?這在這裏是不重要的。 – 2012-01-09 17:55:24

回答

4
find /start/path -name *.html -exec sed -ie 's/abc/XYZ/g' '{}' \; 

正如你的要求,在這裏是做什麼的:

find /start/path -name *.html 

查找與水珠爲*。html的,在開始/啓動/路徑下的所有文件

-exec選項告訴找到,不只是打印出來的文件,而是運行一個命令。在這個命令中{}被文件替換。 -exec選項最後以分號結尾,我們必須用反斜槓來轉義,否則bash會吞下它。

再次,從OP的特殊情況:將以下到一個名爲replaceabc.sh文件

#!/bin/bash 
find '/home/129224/domains/sandpit.uk-cpi.com/html/sshit' -name '*.html' -exec sed -ie 's/abc/XYZ/g' '{}' \; 

然後從shell提示

chmod 700 /path/to/replaceabc.sh 
/path/to/replaceabc.sh 
+0

這似乎工作!但爲什麼?? – 2012-01-11 15:26:11

+0

好的,當你登錄到Linux命令行時,你在一些類似於Windows的cmd.exe的「shell」中,它接受和執行你的命令。不同的Shell遵循不同的語義,尤其是引用。現在通過將命令放入一個shell腳本(類似於Windows中的批處理文件),並用#!/ bin/bash作爲前綴,我可以強制該文件被「bash」shell解釋,這就是它工作的原因。簡而言之:我將通過SSH獲得的未知外殼的命令行解析移到已知的bash中。 – 2012-01-11 15:34:58

+0

我需要sub/abc/for/define('WP_POST_REVISIONS',3); /。我知道我需要避開單引號,但這還不夠,我仍然在意外標記附近出現了'bash:syntax error')''。什麼是適當的逃避呢? – Gaia 2013-06-06 15:14:32