Как я могу записать sed сценарий для удаления чисел из строки?

Таким образом, то, что я закончил тем, что делал в конце, находило сфокусированное окно и xkilling им следующим образом:

 f.exec "xkill -id `xdpyinfo | grep focus | awk '{print $3}' | tr -d ','`"
4
10.09.2013, 23:08
4 ответа

Учитывая этот вход, Вы хотите сохранить первые и последние поля. Довольно простой с awk:

awk '{print $1, $NF}' filename

Используя sed, это заменит разграниченные слова всего пространства только для цифры:

sed ':a; s/ [[:digit:]]\+ / /; ta'
4
27.01.2020, 20:54
  • 1
    , я понимаю, что замена средств s и наклонные черты вправо являются разделителями, но что означают следующие команды?: a; \+ и; ta –   10.09.2013, 23:19
  • 2
    : маркировки, ta означает, "переходят к a": короче говоря, это - цикл –  enzotib 10.09.2013, 23:31
  • 3
    И sed 's/ [[:digit:] ]\+ / /' может сделать это то же –  enzotib 10.09.2013, 23:34
  • 4
    я думал вроде enzotib, но пошел с sed 's/[[:space:]][[:digit:]]\+//g' который удаляет одно или несколько чисел [[:digit:]]\+ продолженный пробелом (вкладки, пробелы) [:space:], и также указанный /g к опциям, чтобы сделать это для всех случаев (и не просто первое) –  Drav Sloan 10.09.2013, 23:41
  • 5
    Причина я искал конечный пробел в цикле, состояла в том, чтобы не соответствовать " 123abc" - т.е. гарантировать, что слово было составлено только с цифрами. –  glenn jackman 11.09.2013, 15:41
sed -e 's/[ ].*[ ]/ /' yourfile

Это проверяет крайний левый пробел и вплоть до крайнего правого пробела и заменяет его одним пробелом. IOW, первое и последнее поля сохраняются.

Предполагается, что нет начальных и / или конечных пробелов. Вкладок нет.

В противном случае мы всегда можем сделать следующее:

SPC=`echo 'x' | tr 'x' '\040'`
TAB=`echo 'x' | tr 'x' '\011'`
WS="[$TAB$SPC]"
sed -e "s/^$WS*//;s/${WS}\$//;s/${WS}.*${WS}/${SPC}/" < yourfile
0
27.01.2020, 20:54
$ echo "a.b.gg3d 0000000001 0000000001 y" |sed -r 's/[ ]+[0-9]+//g'
a.b.gg3d y

-r regex mode

Вы ищете один или несколько пробелов, за которыми следует одно или несколько чисел из любого диапазона от 0 до 9. Технически это совпадает дважды, оставляя третье место между a.b.gg3d и y.

0
27.01.2020, 20:54

Другое решение, использующее только cut , которое выводит первый и четвертый столбцы:

cut -d' ' -f1,4 < samplefile.txt
1
27.01.2020, 20:54

Теги

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