将字符串从一个位置剪切到一个字符
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 中。
我想从多个位置剪切字符串,直到特定字符“/”:
它会切断这一行:
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 中。