Подтвердить что ты не робот

Как отрегулировать строки, считанные со стандартного ввода, на bash?

Мне нужен способ bash для чтения строк со стандартного ввода (поэтому я могу подключить к нему вход) и удалить только символы верхнего и конечного пробелов. Трубопровод для эха не работает.

Например, если вход:

     12 s3c  
     sd wqr

вывод должен быть:

12 s3c
sd wqr

Я хочу избежать написания python script или подобного для чего-то столь же тривиального, как это. Любая помощь приветствуется!

4b9b3361

Ответ 1

Вы можете использовать sed, чтобы обрезать его.

sed 's/^ *//;s/ *$//'

Вы можете легко протестировать его в командной строке, выполнив следующие действия:

echo -n "  12 s3c  " | sed 's/^ *//;s/ *$//' && echo c

Ответ 2

$ trim () { read -r line; echo "$line"; }
$ echo "   aa   bb   cc   " | trim
aa   bb   cc
$ a=$(echo "   aa   bb   cc   " | trim)
$ echo "..$a.."
..aa   bb   cc..

Чтобы заставить его работать для многострочного ввода, просто добавьте цикл while:

trim () { while read -r line; do echo "$line"; done; }

Используя sed только с одной заменой:

sed 's/^\s*\(.*[^ \t]\)\(\s\+\)*$/\1/'

Ответ 3

Добавьте это:
| sed -r 's/\s*(.*?)\s*$/\1/'

Ответ 5

your_command | xargs -L1 echo

Это работает, потому что echo преобразует все табуляции в пробелы, а затем все несколько пробелов в одно пространство, а не только начало и конец, см. пример:

$ printf "  1\t\t\t2    3"
  1         2    3
$ echo `printf "  1\t\t\t2    3"`
1 2 3

Недостатком является то, что он также удалит некоторые полезные символы, такие как \ ' ".