我正在尝试删除文本字符串中除其余11个字符之外的所有字符。字符串是Sample Text_that-would$normally~be,here--pe_-l4_mBY
,最后我要输入的是-pe_-l4_mBY
。
这是我尝试过的:
$ cat food
Sample Text_that-would$normally~be,here--pe_-l4_mBY
$ cat food | sed 's/^.*(.{3})$/\1/'
sed: 1: "s/^.*(.{3})$/\1/": \1 not defined in the RE
请注意,文本字符串并没有真正存储在文件中,我只是以cat food
为例。
OS是macOS High Sierra 10.13.6,bash
版本是3.2.57(1)-发行版
答案 0 :(得分:3)
您可以将此sed
与捕获组一起使用:
sed -E 's/.*(.{11})$/\1/' file
-pe_-l4_mBY
答案 1 :(得分:2)
基本正则表达式(默认为sed
使用)要求捕获组中的括号和大括号表达式中的大括号都必须转义。 (
和{
被视为要匹配的文字字符。
$ cat food | sed 's/^.*\(.\{3\}\)$/\1/'
mBY
相比之下,显式请求sed
使用带有-E
选项的扩展正则表达式会颠倒含义,其中\(
和\{
是文字字符。
$ cat food | sed -E 's/^.*(.{3})$/\1/'
mBY
答案 2 :(得分:1)
答案 3 :(得分:0)
您可以使用tail或Parameter Expansion:
string='Sample Text_that-would$normally~be,here--pe_-l4_mBY'
echo "$string" | tail -c 11
echo "${string#${string%??????????}}"
pe_-l4_mBY
pe_-l4_mBY
答案 4 :(得分:-1)
也和rev/cut/rev
$ echo abcdefghijklmnopqrstuvwxyz | rev | cut -c1-11 | rev
pqrstuvwxyz