В основном мне нужно то, что ОП этого вопроса получил, но не захотел. Как удалить все после определенного шаблона или строки в файле?
Итак, я получил данные типа:
Something and something ........................... 23
Another one .......................................123
Somethingelse Inc. .................................243
Итак, я хочу удалить всю кучу точек (и цифр) после пробела.
До сих пор я пытался использовать команду OP, но она работает не совсем так, как я ожидал, потому что она удаляет все после первой точки, которую она встречает. Это означает, что точка на данных вида Somethinelse Inc. также удаляется.
Я попытался заставить работать первый (sed) ответ из этого вопроса, заменив первый .com тремя точками, а второй - пустым пробелом, но у меня ничего не получилось. На этот раз все после первого пробела удалено или осталось три точки.
Второй ответ (ex -sc ...) сработал так, как хотел ОП, но он оставляет несколько точек, поэтому мне тоже не повезло.
Я также попытался настроить команду из этого ответа, но и это не удалось. Как удалить из строки все до шаблона и все после другого шаблона?
sed 's / \. \ .. * $ //' / путь / к / файлу
должен работать:
\.\. - A space followed by two literal periods
.* - One or characters of any type
$ - End of line
Как насчет этого:
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$
Другое, но неэлегантное решение может быть:
cat path / to / ваш файл | sed -E "s / [\.] {2,} // g" | sed "s / [0-9] // g"> путь / к / новому_файлу
где:
-E
Интерпретировать регулярные выражения как расширенные (современные) регулярные выражения [\.] {2,}
соответствует точке в двух или более вхождениях [0-9]
сопоставить все цифры
s / expr // g
означает заменить сопоставленное expr
ничем, насколько это возможно (g)