Как к grep, затем ищите и замените на выводе?

Используйте редактора для редактирования/etc/ssh/ssh_config и прокомментируйте GSSAPI* опции.

EDIT1:

Я нашел, что то же поведение, когда Вы соединены через некоторые модемы D-ссылки, можно найти его здесь, здесь или здесь. Можно решить это добавление этой строки к правилам брандмауэра:

iptables --table mangle --append OUTPUT --jump DSCP --set-dscp 0x0

Если Ваше действие сервера как маршрутизатор, Вам будет нужна также эта строка:

iptables --table mangle --append PREROUTING --jump DSCP --set-dscp 0x0

6
13.09.2013, 19:01
5 ответов

Существует несколько подходов с помощью также tr, awk или sed

TR:

 iconv -l | grep ISO |head -5 |tr '/' '-'

AWK:

iconv -l | awk '/ISO/{gsub("//","--"); print $0}' |head -5

SED:

iconv -l | grep ISO |head -5 | sed 's/\//-/g'
# or, to avoid needing to escape the backslashes:
iconv -l | grep ISO |head -5 | sed 's#/#-#g'
9
27.01.2020, 20:23
  • 1
    Для tr можно сказать tr '/' '-'. Глобальная замена подразумевается. –  Joseph R. 13.09.2013, 20:31
  • 2
    Обновленный этот ответ для TR, чтобы отразить, что и также добавил мою собственную sed опцию, которая старается не должной быть выйти из обратной косой черты. –  Michael Durrant 14.09.2013, 04:15

grep более или менее подмножество sed (grep обозначает g/re/p команда в ed, и sed похож ed относившийся [s] treams), таким образом, Вы обычно не должны передавать их по каналу вместе.

iconv -l | sed '/ISO/!d;s,//,--,g' | head -n 5
2
27.01.2020, 20:23

sed опция:

$ iconv -l | grep ISO | sed 's#/#-#g' | head -5
CSISO4UNITEDKINGDOM--
CSISO10SWEDISH--
CSISO11SWEDISHFORNAMES--
CSISO14JISC6220RO--
CSISO15ITALIAN--
2
27.01.2020, 20:23

При использовании sed Вы не должны использовать наклонные черты вправо для обозначения аргументов поиску/замене. Можно изменить их на что-либо, что Вы хотите. Например:

$ iconv -l|grep ISO | sed 's@//@--@g' | head -5
CSISO4UNITEDKINGDOM--
CSISO10SWEDISH--
CSISO11SWEDISHFORNAMES--
CSISO14JISC6220RO--
CSISO15ITALIAN--

Это может быть сжато, так как Вы ищете тот же символ к этому:

$ iconv -l|grep ISO|sed 's@/@-@g' | head -5
CSISO4UNITEDKINGDOM--
CSISO10SWEDISH--
CSISO11SWEDISHFORNAMES--
CSISO14JISC6220RO--
CSISO15ITALIAN--
1
27.01.2020, 20:23
  • 1
    Никакая потребность в // и -- так как Вы используете глобальную замену. –  Joseph R. 13.09.2013, 21:01
  • 2
    @JosephR. - да я добирался до него. 8-) –  slm♦ 13.09.2013, 21:02

Существует несколько способов сделать это, но я использовал бы sed с -n иначе --quiet или --silent опция подавить вывод по умолчанию.

iconv -l | sed -n -e '/ISO/ s://:--:p'

Это sed сценарий игнорирует строки, не содержащие "ISO", изменения//к - и печатает (измененный) согласующий отрезок длинной линии. Финал 'p' в сценарии - то, что говорит sed печатать тот согласующий отрезок длинной линии.

Для предотвращения большого ужасного выхода обратной косой черты я использовал : как regexp символ разделителя, а не /

Дополнительную информацию см. в sed странице справочника.

0
27.01.2020, 20:23

Теги

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