如何在shell脚本中删除字符串的子字符串?

时间:2013-01-07 10:39:58

标签: string shell sed scripting

我有一个包含以下单词列表的文件:

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
...

5 个答案:

答案 0 :(得分:15)

你可以得到它:

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

输出:

456

答案 1 :(得分: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 :(得分:2)

试试这个。

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

答案 3 :(得分:2)

这可能适合你(GNU sed):

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

然而,如果出现以下情况可能会有些过分:

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

就足够了。

答案 4 :(得分:1)

这是一个纯粹的bash实现:

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