我想從多個位置剪切一個字串,直到一個特定的字符 "/" :
它會切斷這條線:
Export text H8X7IS5G.FIC NB regs COLOLO 4138/4138
對此:
4138
我嘗試將 cut -c 與位置和字符一起使用,但當然它不起作用:
cut -c 57-'/'
uj5u.com熱心網友回復:
如果您想堅持下去,cut那么這可能就是您想要的:
echo 'Export text H8X7IS5G.FIC NB regs COLOLO 4138/4138' |
cut -c41- | cut -d/ -f1
還有許多其他方法可以完成此任務。例如,如果您有一個grep支持與 perl 兼容的正則運算式,那么我建議您這樣做:
grep -Po '.{40}\K[^/]*'
或者,sed單線:
sed 's/.\{40\}//; s|/.*||'
或者,使用純 bash
[[ $line =~ .{40}([^/]*) ]] && printf '%s\n' "${BASH_REMATCH[1]}"
uj5u.com熱心網友回復:
假設您嘗試一次處理單個變數(而不是具有數百或數千行的流),您根本不需要這樣做cut。
input='Export text H8X7IS5G.FIC NB regs COLOLO 4138/4138'
result=${input:40}
echo "${result%%/*}"
...發射4138。
兩者${var:start:len}(及其較短的同義詞${var:start})和${var%%PATTERN}都是引數擴展語法的示例;前者只取從給定位置開始的字串的子集;后者修剪PATTERN(${var%PATTERN}修剪最短可能匹配的PATTERN)的最長可能匹配。
bash 中的這些和其他字串操作也記錄在BashFAQ #100中。
uj5u.com熱心網友回復:
4138從字串中獲取的不同方法:
string="Export text H8X7IS5G.FIC NB regs COLOLO 4138/5000"
- 從位置 #41 開始提取直到
/:
awk -F/ '{print substr($1,41)}' <<< "$string"
/number從最后一個欄位 ( ) 中洗掉4138/5000:
awk '(sub("/.*","",$NF)) {print $NF}' <<< "$string"
/與結尾之前的數字匹配的正則運算式:
sed -E 's/.* ([0-9] )\/[0-9] $/\1/' <<< "$string"
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/410229.html
標籤:
