簡體   English   中英

sed 命令將多個空格替換為單個空格

[英]sed command to replace multiple spaces into single spaces

我嘗試使用 sed 將文件中的多個空格替換為單個空格。

但它會像下面這樣拆分每個字符。 請讓我知道是什么問題...

$ cat test.txt
 iiHi Hello   Hi
this   is   loga

$

$ cat test.txt | tr [A-Z] [a-z]|sed -e "s/ */ /g"
 i i h i h e l l o h i
 t h i s i s l o g a 

您的sed命令做錯了,因為它匹配“零個或多個空格”,這當然發生在每對字符之間! 而不是s/ */ /g你想要s/ */ /gs/ +/ /g

使用tr-s選項會將連續的字符壓縮為一個:

tr -s '[:space:]' < test.txt
 iiHi Hello Hi
this is loga

也要小寫: tr -s '[:space:]' < test.txt | tr '[:upper:]' '[:lower:]' tr -s '[:space:]' < test.txt | tr '[:upper:]' '[:lower:]'

sed 's/ \+/ /g' test.txt | tr [A-Z] [a-z]

或者

sed 's/\s\+/ /g' test.txt | tr [A-Z] [a-z]

很遺憾,因為*匹配零個或多個,它在每個字符后插入一個空格,您希望+匹配一個或多個。 我也改變了順序,因為這樣做你不必cat文件。

您可以使用awk來解決這個問題:

awk '{$0=tolower($0);$1=$1}1' test.txt
iihi hello hi
this is loga

也許您可以為多個空格匹配以下正則表達式:

'\\s+'

並只替換一個空格,如下所示:

' '

暫無
暫無

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

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