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

String 如何删除shell脚本中字符串的子字符串?,string,shell,sed,scripting,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 ... 你可以得到它: test

我有一个文件,上面有一个单词列表,如:

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
...
你可以得到它:

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

456

使用
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 's/^...//' file
ST_WORD abc
ST_WORD(1) bcd
ST_WORD(2) def
OND_WORD gh
RD_WORD jiu
RD_WORD(1) lom

使用
sed
删除前3个字符:

$ 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 's/^...//' file
ST_WORD abc
ST_WORD(1) bcd
ST_WORD(2) def
OND_WORD gh
RD_WORD jiu
RD_WORD(1) lom
试试这个

sed 's/([0-9])//g' file
这可能适用于您(GNU-sed):

但是,如果:

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

就足够了。

这里是一个纯bash实现:

while read -r a b; do
    echo "${a%(*)}" "$b"
done < input.txt
读取时-r a b;做
回显“${a%(*)}”“$b”
完成
test=“123456 abc”echo${test:3}作为输出456 abc给出。我想要123abc@user1835630这是一个与标题和示例不同的问题?你到底想做什么?然后试试:
echo${test:0:3}
你会得到
123
它给了我错误的替换问题标题与示例不匹配!?因此,如果
(i)
出现在其他地方,则不应将其替换,或者它将永远不会出现,除非按照示例进行替换?@ChrisSeymour由于OP很久没有响应,因此我更新了问题标题。请考虑删除你的评论和更新(最好的IMO)来提这个。