объяснение команды bash SED с точкой с запятой - PullRequest
0 голосов
/ 27 сентября 2018

Что делает эта команда sed?и есть ли какая-нибудь онлайн-утилита, которая немного объясняет sed, например, regex?

sed -i '1s/$/|,a Type,b Type,c Type/;/./!b;1!s/$/|,,,/' textflile.txt

Я думаю, что в начале она добавляет csv a a, b type, c type в конце строкино что делает остальная часть команды тоже

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018
sed -i '1s/$/|,a Type,b Type,c Type/;/./!b;1!s/$/|,,,/' textflile.txt

можно записать как

sed -i '
    1 s/$/|,a Type,b Type,c Type/
    /./! b
    1! s/$/|,,,/
' textflile.txt
  1. только в строке 1, добавить немного текста в конец строки
  2. , если строка пуста ("соответствует1 символ, а не "), перейти к следующему" циклу "(т. Е. Напечатать текущую строку и перейти к следующей строке)
  3. в каждой строке , кроме строки 1 , добавить" | ,,, "до конца строки

Итак, похоже, что вы добавляете несколько пустых полей в файл CSV.

info sed содержит полное руководство по sed.

0 голосов
/ 27 сентября 2018

Это не отвечает на ваш вопрос, но для людей важно знать и требует больше места и форматирования, чем комментарий, поэтому: FYI делает то, что @ choroba говорит , что делает сценарий sed, то есть

it adds |,a type, b Type,c Type to the first line,
doesn't change empty lines,
and adds |,,, to all the remaining lines.

это только в awk:

awk '
    NR==1 { print $0 "|,a type, b Type,c Type"; next }
    !NF   { print }
    NF    { print $0 "|,,," }
'

или если вы знакомы с троичными выражениями и хотите удалить избыточный код:

awk '{
    sfx = "|," (NR==1 ? "a type, b Type,c Type" : ",,")
    print $0 (NF ? sfx : "")
}'
0 голосов
/ 27 сентября 2018

Я не знаю ни одной такой утилиты, но позвольте мне объяснить с помощью текстового редактора:

sed -i '1s/$/|,a Type,b Type,c Type/;/./!b;1!s/$/|,,,/' textflile.txt
    ^   ^  ^                          ^ ^^ ^^                       ^
    |   |  |                          | || ||                       |
modify  |  End                Non-empty || ||                       input
the     |  of                 lines     || |Negation,               file
file    |  line               only      || |i.e. lines 2,3,...
in      |                               || |
place   |                               || First
     First line            Negation, i.e.| line
                         empty lines only|
                                         Branch to
                                         script end,
                                         i.e. skip the rest

Другими словами, он добавляет |,a type, b Type,c Type к первой строке, не меняет пустоеи добавляет |,,, ко всем оставшимся строкам.

...