удаление символа в определенном контексте (используя сценарий оболочки)

Я использовал следующее (работает только если ваш текст не содержит|):

cat myfile | tr '\t' '|' | column -t -s '|'

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

(Я сделал это, потому что не увидел в ответе Стефана ничего, что могло бы сработать -или -коробку -в рыбьей оболочке. В противном случае ответ Стефана кажется хорошим.)

0
18.09.2019, 20:52
2 ответа

Думаю, это подойдет для GNUsed:

sed -E 's/^([A-Z]+\.)[[:blank:]]([A-Z]+\.)/\1\2/' file
1
28.01.2020, 02:39

Я думаю, что лучше всего подойдет sed, вот моя версия:

sed -r ':a;s/^(.*\.)(\ )+(.\.)(.*)$/\1\3\4/;t a' file

-r -- use extended regular expressions
:a -- label "a" 
^(.*\\.) -- 1st group matches any character "." from the line beginning up to a literal "\\.".   
(\ )+ -- 2nd group matches white space (+ is one or more) 
(.\.) -- 3rd group matches the next letter 
(.*)$ -- 4th group matches to the end of the line
;t a -- if the previous substitution did something then branch to label "a"
/\1\2\4/ -- replaces the matches with groups 1,3,4 removing the space 

Это обрабатывает произвольные сокращения, например. :S.O.V. Соверен

0
28.01.2020, 02:39

Теги

Похожие вопросы