我正在尋找一種方法來刪除發生在文件開頭或結尾處的「雜散」回車。即:在開始或結束文件中發生回車的正則表達式
\r\n <-- remove this guy
some stuff to say \r\n
some more stuff to say \r\n
\r\n <-- remove this guy
你會如何匹配\ r \ n後面跟'沒有'或前面是'沒有'?
我正在尋找一種方法來刪除發生在文件開頭或結尾處的「雜散」回車。即:在開始或結束文件中發生回車的正則表達式
\r\n <-- remove this guy
some stuff to say \r\n
some more stuff to say \r\n
\r\n <-- remove this guy
你會如何匹配\ r \ n後面跟'沒有'或前面是'沒有'?
試試這個正則表達式:
^(\r\n)+|\r\n(\r\n)+$
根據不同的語言或者在多行模式下的正則表達式:
^\r\n|\r\n$
或者這個表達式:
\A\r\n|\r\n\z
第一個在例如工作perl(其中^和$匹配單行模式下的開始/結束行和多行模式下字符串的開始/結束)。後者在例如紅寶石。
這裏有一個sed
版本應打印出剝離文件:
sed -i .bak -e '/./,$!d' -e :a -e '/^\n*$/{$d;N;ba' -e '}' foo.txt
的-i
告訴它進行就地編輯和.bak
告訴它備份原始與.bak
擴展第一。如果需要關注內存,則可以使用''
而不是.bak
,並且不會進行備份。不過,除非絕對必要,否則我不推薦。
第一個命令('/./,$!d'
應該除去所有前導空行),其餘的是處理所有尾隨的空行。
請參閱this list of handy sed
1-liners您可以鏈接在一起的其他有趣的事情。
^\s+|\s+$
\s is whitespace (space, \r, \n, tab)
+ is saying 1 or more
$ is saying at the end of the input
^ is saying at the start of the input
他想只刪除\ r \ n – Thiyagaraj 2009-09-16 14:52:15
在大多數實現$和^指的是行的開始/結束,不是整個字符串,除非您專門啓用多行模式。 – sepp2k 2009-09-16 14:52:43
@Thiyagaraj:他說* \ r \ n後面跟着'沒什麼'或之前沒有'*',所以我猜他是指空格。 @ sepp2k:正確 – amitkaz 2009-09-16 15:25:24