2017-05-11 283 views
0

我有一個文本文件,其中包含jobname,業務名稱和時間,最小分隔符' - '(SfdcDataGovSeq-IntegraterJob-43)。此文本文件中有很多作業。我想用作業名稱進行搜索,並僅將特定行的時間從43更改爲0,並更新相同的文本文件。請告訴我們需要做些什麼。AIX中的Unix Shell腳本(Sed命令)

查詢我正在使用:(cat test.txt | grep「SfdcDataGovSeq」| sed -e's/43/0 /'> test.txt),但整個文件被替換爲只有一行。

+0

歡迎來到StackOverflow。請參加[旅遊]。使用某些格式化選項可以提高您的問題的可讀性。否則很好的mcve。 – Yunnosch

回答

0
sed -e '/SfdcDataGovSeq/ s/43/0/' test.txt 

這隻會在搜索結果爲肯定時纔會被替換。

與Ed達成一致,下面是解決詞邊界的解決方法儘管平等與awk是健壯的。

sed -e '/SfdcDataGovSeq/ s/\<43\>/0/g' test.txt 
+0

它是隻替換那個特定行中的43,還是用0代替該文件中存在的所有'43'值。 –

+0

它只會替換其中包含「SfdcDataGovSeq」的行。 –

+0

由於職位名稱不同,所以只能在一行上操作,因此絕對有幫助 –

0

您應該使用sed的AWK代替:

awk 'BEGIN{FS=OFS="-"} $1=="SfdcDataGovSeq" && $3==43{$3=0} 1' file 

因爲它完全字符串或數字(不是正則表達式)在特定領域相匹配,上面是比目前公認的SED更強大給出各種可能的輸入值會對你的輸入文件造成嚴重破壞的答案。

+0

嗨,Ed,你能解釋「{FS = OFS =」 - 「} –

+0

它將輸入和輸出字段分隔符設置爲」 - 「符號,以便您的數據被分割爲」 - 「 - 分隔的字段,請參閱https:// www.gnu.org/software/gawk/manual/gawk.html#Field-Separators和https://www.gnu.org/software/gawk/manual/gawk.html#Output-Separators –