将字符串从一个位置剪切到一个字符

Cut string from position to character

我想从多个位置剪切字符串,直到特定字符“/”:

它会切断这一行:

Export text H8X7IS5G.FIC NB regs COLOLO 4138/4138

给这个:

4138

我尝试的是将 cut -c 与位置和字符一起使用,但当然它不起作用:

cut -c 57-'/'

如果您想坚持使用 cut 那么这可能就是您想要的:

echo 'Export text H8X7IS5G.FIC NB regs COLOLO 4138/4138' |
cut -c41- | cut -d/ -f1

还有许多其他方法可以完成此任务。例如,如果你有一个支持与 perl 兼容的正则表达式的 grep,那么我会沿着这条线提出一些建议:

grep -Po '.{40}\K[^/]*'

或者,sed 一行:

sed 's/.\{40\}//; s|/.*||'

或者,使用纯 bash

[[ $line =~ .{40}([^/]*) ]] && printf '%s\n' "${BASH_REMATCH[1]}"

假设您尝试一次处理一个变量(而不是具有数百或数千行的流),您根本不需要 cut

input='Export text H8X7IS5G.FIC NB regs COLOLO 4138/4138'
result=${input:40}
echo "${result%%/*}"

...发出 4138.

${var:start:len}(及其较短的同义词${var:start})和${var%%PATTERN}都是parameter expansion语法的例子;前者只接受从给定位置开始的字符串的一个子集;后者修剪 PATTERN 的最长可能匹配(${var%PATTERN} 修剪 最短 可能的 PATTERN 匹配)。

bash 中的这些和其他字符串操作也记录在 BashFAQ #100 中。