Я получил строку вроде следующего:
test.de. 1547 IN SOA ns1.test.de. dnsmaster.test.de. 2012090701 900 1000 6000 600
теперь я хочу заменить все табуляции / пробелы между записями только одним пробелом, чтобы я мог легко использовать его с cut -d " "
Я попробовал следующее:
sed "s/[\t[:space:]]+/[:space:]/g"
и различные варианты, но не могли заставить его работать. Любые идеи?
cut
поддержки-w
?Ответы:
использование
sed -e "s/[[:space:]]\+/ /g"
Вот объяснение:
Для замены вам нужно только вставить пробел.
[:space:]
не будет работать там, так как это аббревиатура для класса персонажа, а движок регулярных выражений не будет знать, какой символ поместить туда.+
Должны быть экранированы в регулярном выражении , потому что с СЕПГ регулярных выражений+
является нормальным характер , тогда как\+
это метасимволом для «один или более». На странице 86 « Освоение регулярных выражений» Джеффри Фридл упоминает в сноске, что ed и grep использовали экранированные скобки, потому что «Кен Томпсон считал, что регулярные выражения будут использоваться в основном для работы с кодом C, где необходимость сопоставлять необработанные скобки будет более распространенной, чем обратная ссылка «. Я предполагаю, что он чувствовал то же самое по отношению к знаку плюс, отсюда и необходимость избегать его, чтобы использовать его в качестве метасимвола. Легко быть запутанным этим.В СЭД вам нужно бежать
+
,?
,|
,(
, и)
. или используйте -r для использования расширенного регулярного выражения (тогда это выглядит какsed -r -e "s/[[:space:]]\+/ /g"
илиsed -re "s/[[:space:]]\+/ /g"
источник
\+
вместо просто+
?\+
Вы можете использовать
-s
("squeeze") параметрtr
:Класс
[:blank:]
персонажа состоит из пробелов и табуляции.источник
Мне нравится использовать следующий псевдоним для Bash. Основываясь на том, что написали другие, используйте sed для поиска и замены нескольких пробелов одним пробелом. Это помогает получить последовательные результаты от резки. В конце я запускаю его через sed еще раз, чтобы изменить пространство на табуляцию, чтобы его было легче читать.
источник