Как удалить все (в каждой строке) в текстовом файле после определенного шаблона символов (включая шаблон)?

В основном мне нужно то, что ОП этого вопроса получил, но не захотел. Как удалить все после определенного шаблона или строки в файле?

Итак, я получил данные типа:

Something and something ........................... 23
Another one .......................................123
Somethingelse Inc. .................................243

Итак, я хочу удалить всю кучу точек (и цифр) после пробела.

До сих пор я пытался использовать команду OP, но она работает не совсем так, как я ожидал, потому что она удаляет все после первой точки, которую она встречает. Это означает, что точка на данных вида Somethinelse Inc. также удаляется.

Я попытался заставить работать первый (sed) ответ из этого вопроса, заменив первый .com тремя точками, а второй - пустым пробелом, но у меня ничего не получилось. На этот раз все после первого пробела удалено или осталось три точки.

Второй ответ (ex -sc ...) сработал так, как хотел ОП, но он оставляет несколько точек, поэтому мне тоже не повезло.

Я также попытался настроить команду из этого ответа, но и это не удалось. Как удалить из строки все до шаблона и все после другого шаблона?

0
13.04.2017, 15:36
3 ответа

sed 's / \. \ .. * $ //' / путь / к / файлу должен работать:

 \.\. - A space followed by two literal periods
.*    - One or characters of any type
$     - End of line 
1
28.01.2020, 02:47

Как насчет этого:

sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g'

, что означает:

от одного до + многих (\ +) точек (\.) И от нуля ко многим (*) пробелы () И от одного + до + многих (\ +) цифр ([[: digit:]]) И просто -в случае любой (*) пробел ([[: space:]]) И Конец этой строки ($)

Протестировано с (Обратите внимание, что я вставил ". ..234 "во 2-й строке и в конце табуляция / пробелы):

Something and something ........................... 23<Tab>
An ...234 other one .......................................123<space>
Somethingelse Inc. .................................243<some spaces>

И результат:

xb@dnxb:/tmp$ sed 's/\.\+ *[[:digit:]]\+[[:space:]]*$//g' sample.txt
Something and something 
An ...234 other one 
Somethingelse Inc. 
xb@dnxb:/tmp$ 
0
28.01.2020, 02:47

Другое, но неэлегантное решение может быть:

cat path / to / ваш файл | sed -E "s / [\.] {2,} // g" | sed "s / [0-9] // g"> путь / к / новому_файлу

где:

  • -E Интерпретировать регулярные выражения как расширенные (современные) регулярные выражения
  • [\.] {2,} соответствует точке в двух или более вхождениях
  • [0-9] сопоставить все цифры

  • s / expr // g означает заменить сопоставленное expr ничем, насколько это возможно (g)

0
28.01.2020, 02:47

Теги

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