如何管道一个字符串并从中删除几个字符?例如:
$ echo forbes | ... -3
for
$ echo cucumber | ... -4
cucu
$ echo 1461624333 | .. -3
1461624
...
etc.
Run Code Online (Sandbox Code Playgroud)
我找不到${str:0:-3}在管道中使用语法的方法.
GNU是另一个选项(从整个输入字符串中head删除最后一个字符- 即使它跨越多行):n
$ printf '1461624333' | head -c -3 # drop last 3 chars.
1461624
Run Code Online (Sandbox Code Playgroud)
请注意,如果您使用echo代替,则必须考虑printf尾随,因此您必须添加到计数中(并且输出不会有尾随)。\n1\n
注意:对 byteshead -c进行操作,因此仅适用于单字节编码,例如 ASCII 和扩展 ASCII 变体(例如 ISO-8859=1),因此不适用于 UTF-8。
管道到sed:
$ echo forbes | sed 's/...$//'
for
Run Code Online (Sandbox Code Playgroud)
这匹配字符串的最后三个字符并删除它们(用空字符串替换).
要参数化要删除的字符数,我们可以将它包装在一个小函数中:
pipesubstr () {
sed "s/.\{$1\}$//"
}
Run Code Online (Sandbox Code Playgroud)
使用如下:
$ echo forbes | pipesubstr 3
for
$ echo cucumber | pipesubstr 4
cucu
$ echo 1461624333 | pipesubstr 3
1461624
Run Code Online (Sandbox Code Playgroud)
使用cut?
$ echo "forbes" | cut -b 1-3
for
Run Code Online (Sandbox Code Playgroud)
更新:
要从后面剃须,您可以执行以下操作:
echo "forbes" | rev | cut -c (n+1)- | rev
Run Code Online (Sandbox Code Playgroud)
n你想从最后剃掉的字符数在哪里
echo "forbes" | rev | cut -c 4- | rev
for
Run Code Online (Sandbox Code Playgroud)