[英]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/ */ /g
或s/ +/ /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.