sed:删除除最后 n 个字符之外的所有字符
sed: remove all characters except for last n characters
我正在尝试删除文本字符串中除剩余 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})$//'
sed: 1: "s/^.*(.{3})$//": not defined in the RE
请注意,文本字符串并没有真正存储在文件中,我只是以 cat food
为例。
OS 是 macOS High Sierra 10.13.6 和 bash
版本是 3.2.57(1)-release
您可以将此 sed
与捕获组一起使用:
sed -E 's/.*(.{11})$//' file
-pe_-l4_mBY
还有 rev/cut/rev
$ echo abcdefghijklmnopqrstuvwxyz | rev | cut -c1-11 | rev
pqrstuvwxyz
man rev
=> rev - reverse lines characterwise
基本正则表达式(sed
默认使用)要求捕获组中的括号和大括号表达式中的大括号都被转义。 (
和 {
被视为要匹配的文字字符。
$ cat food | sed 's/^.*\(.\{3\}\)$//'
mBY
相比之下,明确要求 sed
使用带 -E
选项的扩展正则表达式会颠倒意思,\(
和 \{
是原义字符。
$ cat food | sed -E 's/^.*(.{3})$//'
mBY
也试试这个:
grep -o -E '.{11}$' food
grep
与 sed
一样,接受任意数量的文件名参数,因此不需要单独的 cat
。 (另见 useless use of cat
.)
您可以使用尾部或参数扩展:
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
我正在尝试删除文本字符串中除剩余 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})$//'
sed: 1: "s/^.*(.{3})$//": not defined in the RE
请注意,文本字符串并没有真正存储在文件中,我只是以 cat food
为例。
OS 是 macOS High Sierra 10.13.6 和 bash
版本是 3.2.57(1)-release
您可以将此 sed
与捕获组一起使用:
sed -E 's/.*(.{11})$//' file
-pe_-l4_mBY
还有 rev/cut/rev
$ echo abcdefghijklmnopqrstuvwxyz | rev | cut -c1-11 | rev
pqrstuvwxyz
man rev
=> rev - reverse lines characterwise
基本正则表达式(sed
默认使用)要求捕获组中的括号和大括号表达式中的大括号都被转义。 (
和 {
被视为要匹配的文字字符。
$ cat food | sed 's/^.*\(.\{3\}\)$//'
mBY
相比之下,明确要求 sed
使用带 -E
选项的扩展正则表达式会颠倒意思,\(
和 \{
是原义字符。
$ cat food | sed -E 's/^.*(.{3})$//'
mBY
也试试这个:
grep -o -E '.{11}$' food
grep
与 sed
一样,接受任意数量的文件名参数,因此不需要单独的 cat
。 (另见 useless use of cat
.)
您可以使用尾部或参数扩展:
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