поиск и замена 1 или более пробелов после периода в файлах на 2 пробела [закрыто]

Если вам нужны полные урлы в каждой строке, а не подстроки, вы можете использовать comm

comm -23 <(sort -u fileA) <(sort -u fileB)

Объяснение:
comm ожидает сортированный вход, поэтому мы сначала сортируем и уникализируем 2 файла (sort -u file).
Далее - используем подстановку процесса, чтобы передать вывод sort -u как "файл" в comm, поскольку comm ожидает файлы: comm <() <().
Last - подавить столбцы 2 (строки, уникальные для файла B) и 3 (строки, общие для обоих файлов), чтобы вывести только строки в столбце 1 (строки, уникальные для файла A).

4
28.09.2018, 17:53
2 ответа
sed 's/\.[[:space:]]\{1,\}/.  /g'

Заменит точку (, совпадающую с \.или [.]. Помните, что .соответствует любому символу ), за которым следует один или несколько пробелов.([[:space:]]является стандартным эквивалентом\s.с двумя пробелами.

Вы также можете сделать это для !и ?:

sed 's/\([.!?]\)[[:space:]]\{1,\}/\1  /g'

В последних версиях GNU sedвы можете сократить его до:

sed -E 's/([.!?])\s+/\1  /g'

Или сperl:

perl -lne 's/[.!?]\K\s+/  /g'

[[:space:]]и \sсоответствуют любому пробельному символу (, хотя с perlэто ограничено символами ASCII ). Это включает в себя символы CR, которые встречаются в конце строк в текстовых файлах MS -DOS, но в остальном обычно не используются в качестве пробелов. Таким образом, эти команды могут привести к нарушению разделителей строк MS -DOS, если они применяются к файлам, отформатированным MS -DOS.

Вместо [[:space:]]/\sвы можете использовать [[:blank:]]/\h, которые не включают CR (\h, поддерживается perl, но не GNUsed).

6
27.01.2020, 20:50

Допустим, ваш текст сохранен в файле с именем «файл», тогда вы используете awkследующим образом

cat file
this is OK: Turn the knob. Push the \u201con\u201d button. This is not: Turn the knob. Push the \u201con\u201d button.    

awk '$1=$1' OFS=" " file

или sedследующим образом:

sed -E "s/[[:space:]]+/ /g" file
1
27.01.2020, 20:50

Теги

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