2013-01-07 86 views
2

我有喜歡的單詞列表文件:如何刪除shell腳本中的字符串的子字符串?

FIRST_WORD abc 
FIRST_WORD(1) bcd 
FIRST_WORD(2) def 
SECOND_WORD gh 
THIRD_WORD jiu 
THIRD_WORD(1) lom 
... 

,我想刪除(i),當它存在時,獲得:

FIRST_WORD abc 
FIRST_WORD bcd 
FIRST_WORD def 
SECOND_WORD gh 
THIRD_WORD jiu 
THIRD_WORD lom 
... 
+4

問題標題不符的例子!? –

+1

所以如果'(i)'出現在其他地方,它不應該被替換,否則它將永遠不會出現,除非按照示例? – Bohemian

+0

@ChrisSeymour由於OP很久沒有迴應,我更新了問題標題。請考慮刪除您的評論並更新[您的回答](https://stackoverflow.com/a/14194320/711006)(最好的一個國際海事組織)來提及這一點。 – Melebius

回答

13

你可以得到它:

test="123456" 
echo ${test:3} 

輸出:

456 
+0

test =「123456 abc」 echo $ {test:3}給出輸出456 abc。 我想獲得123 abc – user1835630

+1

@ user1835630這是一個與標題和示例不同的問題?你究竟想要做什麼? –

+0

然後嘗試:'echo $ {test:0:3}',你會得到'123' – arutaku

3

全球更換使用sed在括號內發現的所有數字的字符串:

$ sed 's/([0-9]\+)//g' file 
FIRST_WORD abc 
FIRST_WORD bcd 
FIRST_WORD def 
SECOND_WORD gh 
THIRD_WORD jiu 
THIRD_WORD lom 

# Save the changes back to the file 
$ sed -i 's/([0-9]\+)//g' file 

取出使用sed第3個字符:

$ sed 's/^...//' file 
ST_WORD abc 
ST_WORD(1) bcd 
ST_WORD(2) def 
OND_WORD gh 
RD_WORD jiu 
RD_WORD(1) lom 
2

試試這個。

sed 's/([0-9])//g' file 
2

這可能爲你工作(GNU SED):

sed -r '$!N;s/^((\S+).*\n\2)\([^)]*\)/\1/;P;D' file 

但是它可能是矯枉過正,如果:

sed 's/([0-9]\+)//' file 

是足矣。

1

這是一個純粹的bash實現:

while read -r a b; do 
    echo "${a%(*)}" "$b" 
done < input.txt 
相關問題