2015-07-03 63 views
0

您能否讓我知道如何用另一個字符串替換服務器中文本文件或ksh文件中存在的特定字符串?如何在UNIX shell腳本中用另一個字符串替換特定的字符串

例如: -

我目前在路徑/file_sys/file 10個文件在我所「結算」,在所有10個文件一詞取代「條例」。

+1

看看'sed'和'awk'工具。首先閱讀他們的手冊頁。 – arkascha

+0

是的,我嘗試過使用sed -i's/BILL/BILLING/g'*但是我得到錯誤sed:非法選項 - 我 –

+0

您本地'man'頁面記錄了'-i'標誌和您的'sed'命令纔不是?這聽起來有點奇怪... – arkascha

回答

1

工作對我來說:

我創建了一個文件「測試」這一內容:「這是一個簡單的測試」。現在我執行這個調用sed命令:

sed -i 's/ is/is not /' test 

之後的文件「測試」包含此內容:「這不是一個簡單的測試」


如果您sed實用程序不支持-i標誌,然後有一個有點尷尬的解決方法:

sed 's/ is/is not /' test > tmp_test && mv tmp_test test 
+0

我試過用sed的/ BILL/BILLING/g'示例。txt 但它並不適用於我,因爲Example.txt文件仍然具有'BILL'值 –

+0

我爲您的奇怪版本的'sed'添加了一種解決方法。尷尬,但工作。 – arkascha

+0

哦,另一個提示:你的正則表示法試圖替換字符串'BILL',而不是'BILL'(注意尾部空格(''))。如果你的文件不包含空白,那麼正則表達式將不會匹配和替換... – arkascha

0

這應該工作。請找到測試。

$貓>文件1

我是BILL男孩

sed 's/[[:alnum:] [:cntrl:] [:lower:] [:space:] [:alpha:] [:digit:] [:print:] [:upper:] [:blank:] [:graph:] [:punct:] [:xdigit:]]BILL[[:alnum:] [:cntrl:] [:lower:] [:space:] [:alpha:] [:digit:] [:print:] [:upper:] [:blank:] [:graph:] [:punct:] [:xdigit:]]/BILLING/g' file1>file2 

$貓文件2

我是一個BILLING男孩

+0

無論單詞BILL在您的文件中出現的位置如何,這都會起作用。 @NeethuShaji –

+0

txt文件只有BILL,沒有別的。 我試着通過在BILL結尾處輸入一個輸入法,它的工作原理是...... BILL被BILLING替換爲命令sed's/BILL/BILLING/g'Example.txt> Exam.txt –

+0

但是上面的代碼不會要求你輸入:)。 @NeethuShaji –

0

使用sed

sed 's/\bBILL\b/BILLING/g' file 

對於就地:

sed --in-place 's/\bBILL\b/BILLING/g' file 
0

for循環可能協助來處理多個文件,而且在這裏我假設-i選項不可用:

for file in $(grep -wl BILL /file_sys/file/*); do 
    echo $file 
    sed -e 's/\bBILL\b/BILLING/g' $file > tmp 
    mv tmp $file 
done 

這裏的發生的事情:
  grep -w          搜索包含詞BILL
的所有文件(並且只有它)   grep -l          清單的文件名(而不是內容)
  $(....)          執行什麼括號內(命令替換)
  for file in  遍歷列表中的每個項目(每個文件與BILL在裏面)
  echo $file      打印每個文件名我們循環過
  sed command  一詞取代BILL(這裏,用字邊界「\ b」的具體界定)與計費,爲tmp文件
  mv command    移動tmp的文件恢復到原來的名稱(替代原)

你可以很容易地測試這個,而不需要實際改變任何東西 - 例如只是打印文件名,或者只是打印內容(以確保在更換原始文件之前已經得到了您所期望的內容)。

相關問題