Использование sed, как заменить 2 или более белых пробела на NULL?Заменить 2 или более пробелов в файле с помощью NULL
Входной
200 0 0 100 300 400 10
Желаемая выход
200 0 0100300400 10
Использование sed, как заменить 2 или более белых пробела на NULL?Заменить 2 или более пробелов в файле с помощью NULL
Входной
200 0 0 100 300 400 10
Желаемая выход
200 0 0100300400 10
Вы можете использовать sed
(это не относится к GNU СЭД):
sed -r 's/[ ]{2,}//g' filename
или (без -r
):
sed 's/[ ]\{2,\}//g' filename
Для вашего входа, это будет производить:
200 0 0100300400 10
Не нужно помещать пробел в список символов, так как в этом нет ничего особенного. Вероятно, вы должны указать, что он специфичен для GNU, поэтому плакат не тратит время на отладку, если он (он), скажем, Solaris. –
Более основным регулярным выражением будет 's/* // g' - два пробела, за которыми следуют ноль или более пробелов, или с общим пробелом:' s/[[: space:]] [[: space:]] [[ : space:]] * // g' –
@EdMorton (1) Это не спецификация GNU-sed, и она будет хорошо работать с другими вариантами sed. (2) Я понимаю, что пространство не является особенным, но я считаю его читаемым для квантификаторов при сопоставлении нескольких пространств. – devnull
sed 's/ \+//g' INPUTFILE
будет работать (если вы GNU СЭД).
Вы должны указать, что он специфичен для GNU. –
Короче и отлично работает. :) Привет. –
Это будет работать с любой СЭД, а не только GNU СЭД:
sed -e 's/ *//g'
Проводка здесь для справки, в awk
решение:
$ echo '200 0 0 100 300 400 10' | awk '{gsub(/ +/,"")}1'
200 0 0100300400 10
Поскольку awk использует EREs, gsub() может быть 'gsub (/ + /," ")'. –
К сожалению, вы правы, и вы сохранили персонажа. Спасибо @EdMorton. Обновлен ответ.':)' –
Возможно, это не проблема, но сценарий, опубликованный, также удалит пустые строки. '' {gsub (/ + /, "")} 1 '' будет более безопасным. Конечно, теперь мы снова потеряли сохраненные символы :-). –
Pure Bash. В скрипте можно использовать подстановку параметров:
str="200 0 0 100 300 400 10"
shopt -s extglob
str=${str// +()/}
echo "$str"
200 0 0100300400 10
${str// +()/}
Замещение удаляет все пробельные следуют по крайней мере один пробел.
'replace with NULL' - вы имеете в виду' remove'? –
Да, я хотел удалить. Получил решение Эд. Cheers. –