команда sed для замены нескольких пробелов на одиночные пробелы
Я попытался заменить несколько пробелов в файле на одно пространство с помощью 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
5 ответов
код sed
команда делает неправильную вещь, потому что она соответствует "нулю или более пробелам", что, конечно, происходит между каждой парой символов! Вместо s/ */ /g
вы хотите s/ */ /g
или s/ +/ /g
.
используя tr
на -s
опция будет сжимать последовательные символы до одного:
tr -s '[:space:]' < test.txt
iiHi Hello Hi
this is loga
к downcase также:tr -s '[:space:]' < test.txt | tr '[:upper:]' '[:lower:]'
можно использовать awk
чтобы решить эту проблему:
awk '{=tolower();=}1' test.txt
iihi hello hi
this is loga
возможно, вы можете сопоставить следующее регулярное выражение для нескольких пробелов:
'\s+'
и замените только одним пробелом следующим образом:
' '