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

vhmi4jdf  于 2023-10-23  发布在  Shell
关注(0)|答案(6)|浏览(175)

我有一个文件,里面有一串单词,比如:

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

pgpifvop1#

你可以得到它:

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

输出量:

456
pdsfdshx

pdsfdshx2#

试试这个.

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

qhhrdooz3#

使用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
9vw9lbht

9vw9lbht4#

这可能对你有用(GNU sed):

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

然而,它可能是过度杀伤,如果:

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

就足够了。

ymdaylpp

ymdaylpp5#

下面是一个纯bash实现:

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

twh00eeo6#

我通常使用sed来替换文件,因为它是专门为此而构建的,但是如果有人需要在更长的bash脚本中执行此操作,您也可以使用bash的搜索和替换语法${var//search/replace}

while read -r line; do
  echo "${line//(*)/}"
done < ./in.txt

相关问题