我有一个想要操纵的字符串。该字符串是H08W2345678
我如何能够操纵它以便输出只是W2345678
?
同样,如果我想删除最后 4 个字符,H08W2345678
以便我知道H08W234
我该怎么做?
答案1
只需使用 bash (或者ksh93
该语法来自 or zsh
):
string="H08W2345678"
echo "${string:3}"
W2345678
echo "${string:0:-4}"
H08W234
有关更多信息,请参阅 Wooledge wiki字符串操作。
答案2
$ echo "H08W2345678" | sed 's/^.\{3\}//'
W2345678
sed 's/^.\{3\}//'
将找到前三个字符^.\{3\}
并替换为空白。这里^.
将匹配字符串开头的任何字符(^
表示字符串的开头),并且\{3\}
将与前面的模式精确匹配 3 次。因此,^.\{3\}
将匹配前三个字符。
$ echo "H08W2345678" | sed 's/.\{4\}$//'
H08W234
同样,sed 's/.\{4\}$//'
将用空白替换最后四个字符($
表示字符串的结尾)。
答案3
如何从字符串前面“删除”/删除字符?
我有一个想要操纵的字符串。该字符串是 H08W2345678 我如何才能操作它,以便输出只是 W2345678?
echo "H08W2345678" | cut -c 4-
同样,如果我想删除 H08W2345678 中的最后 4 个字符,以便得到 H08W234,我该怎么做?
echo "H08W2345678" | cut -c -7
答案4
和:
string="H08W2345678"
匹配 3 或 4 个字符似乎很简单(对于大多数 shell):
$ printf '%s\t%s\n' "${string#???}" "${string%????}"
W2345678 H08W234
对于较旧的 shell(例如 Bourne shell),请使用:
$ string=H08W2345678
$ expr " ${string}" : " ...\(.*\)"
W2345678
$ expr " ${string}" : " \(.*\)...." '
H08W234
如果需要字符的数字计数,请使用:
$ expr " ${string}" : " .\{3\}\(.*\)"
W2345678
$ expr " ${string}" : " \(.*\).\{4\}" '
H08W234
当然,这些正则表达式也适用于 sed、awk 和 bash 3.0+:
$ echo "$string" | sed 's/^.\{3\}//'
W2345678
$ echo "$string" | sed 's/.\{4\}$//'
H08W234
$ echo "$string" | awk '{sub(/^.{3}/,"")}1'
W2345678
$ echo "$string" | awk '{sub(/.{4}$/,"")}1'
H08W234
$ r='^.{3}(.*)$'; [[ $a =~ $r ]] && echo "${BASH_REMATCH[1]}"
W2345678
$ r='^(.*).{4}$'; [[ $a =~ $r ]] && echo "${BASH_REMATCH[1]}"
H08W234