簡體   English   中英

刪除最后一個字符串(Unix Shell 腳本)

[英]Delete Last String (Unix Shell Script)

我想從包含多個空格分隔的字符串的 Linux/Unix 變量中刪除最后一個字符串 -

strings='Y NULL NULL NULL NULL NULL 20210607 NULL NULL NULL NULL NULL NULL EXCEL'

我想刪除最后一個字符串,即EXCEL

預計 Output -

Y NULL NULL NULL NULL NULL 20210607 NULL NULL NULL NULL NULL NULL

其他輸入集 -

str1='RUB 20210607 SPREAD'
str2='RUSSIA NULL NULL NULL 20210607 Y Y Y N N Y Y HTML'
str3='LONDON NULL NULL NULL 20210607 Y Y Y N N Y Y CSV'

PS - 這里的字符串是非空格字符的尾隨序列。

shell 可以刪除或替換前導或尾隨模式。

strings='Y NULL NULL NULL NULL NULL 20210607 NULL NULL NULL NULL NULL NULL EXCEL'
echo "${strings% *}"

印刷

Y NULL NULL NULL NULL NULL 20210607 NULL NULL NULL NULL NULL NULL

僅當您想打印結果值時才需要echo命令。 當然,您可以像使用變量擴展一樣使用${strings% *} ,例如somecommand $strings vs. somecommand ${strings% *}somecommand "$strings" vs. somecommand "${strings% *}" ,取決於您的需要。

引用https://pubs.opengroup.org/onlinepubs/009604499/utilities/xcu_chap02.html

${parameter%word}
刪除最小后綴模式 這個應該被擴展以產生一個模式。 然后參數擴展將導致參數,其中后綴的最小部分與模式匹配刪除。

您好,您可以使用以下命令嘗試使用awk

strings='Y NULL NULL NULL NULL NULL 20210607 NULL NULL NULL NULL NULL NULL EXCEL'
awk '{$NF="";print}' <<< "$strings"

Output

Y NULL NULL NULL NULL NULL 20210607 NULL NULL NULL NULL NULL NULL

您也可以通過將字段分隔符設置為“EXCEL”來獲取它。

awk -F " EXCEL" '{print $1}' <<< "$strings"

Output 是

Y NULL NULL NULL NULL NULL 20210607 NULL NULL NULL NULL NULL NULL

從op澄清后編輯

下面會起作用,但這個線程中有比我的解決方案更好的方法。 發布這個以獲取一些品種。

awk 'BEGIN{ORS=" ";}{for(i=1;i<NF;i++)print $((i));}END{print "\n"}'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM