我試圖在一個檔案中使用bash腳本中的perl來修剪檔案的開頭和結尾的空間,而不觸及中間的空間
。該檔案的格式如下
<newline>
<space><newline>/span>
<tab><newline>
<space>< tab><newline>
開始<newline><newline>
<space>indENTED< newline><newline>
END<newline>/span>
<space>< tab><newline>
<tab><newline>
<space><newline>
<newline>
注意:<newline>是。
, <space>是 & <tab>是
所以原始檔案看起來像
。
開始
縮進
結束
我需要檔案的內容是
START<newline> <newline>
<space>indENTED< newline><newline>
結束
i.e. 最終檔案是這樣的
START
縮進
END
我試著用他們兩個人的以下命令,但它也修剪了中間的空間。這兩個命令都是修剪整個檔案中的空格&換行,而不是僅僅從檔案的開始修剪
perl -pi -e 's/^s*/gs' sample.txt
perl -pi -e 's/As*//gs' sample.txt
兩者都折疊了所有的內部空間
START<newline>
INDENTED<newline>/span>
END<newline>/span>
我試過這個。它折疊了新行
perl -pi -e 's/s*$//gs' samples.txt
perl -pi -e 's/s*//gs' sample.txt
兩個塌陷的換行線
START<space>INDENTEDEND<newline>
以下是我的假設
A只匹配檔案的開始& 匹配檔案的結束(與^ & $相反)s在gs標志中確保整個檔案被視為單行,并以字符替換換行符。
我是perl的新手。如果有人能幫助我理解我哪里出錯了,我將不勝感激
。uj5u.com熱心網友回復:
你可以在slurp模式下使用這個perl:
perl -0777 -pe 's/^s |(R)s $/$1/g' file
輸出:
START
縮進
END
細節:
-0777 啟用slurp模式,使perl讀取完整檔案^s 匹配檔案開頭的1個以上的空白處(R)s $: 匹配斷行后的1個以上的空白處$1來放回換行符,否則你會得到沒有換行符的檔案內容uj5u.com熱心網友回復:
不是perl,但ed對編輯檔案很有用:
$ printf '%s
' '1,/START/-1d' '/END/ 1,$d' w | ed -s samples.txt
$ cat sample.txt
開始
縮進的
結束
這d洗掉了從第一行到匹配START的前一行,以及從END后一行到檔案結尾的所有行,然后w將改變的檔案寫回磁盤。
或者采用類似的
perl方法,只列印你想保留的范圍內的行:
perl -i -ne 'print if /START/./END/' sample.txt
uj5u.com熱心網友回復:
這里是一個簡短的sed版本:
sed -n '/START/,/END/p'
或者用否定的邏輯:
sed '1,/START/{/START/!d}; /END/,${/END/!d}'/span>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/332790.html
標籤:
上一篇:在SQL中基于另一列獲取最大日期
