... | sed -e 's/\(InfoValue:\)\s.*/\1\ /g'
Команда s/pattern/replacement/g
ищет все совпадения шаблона в строке и заменяет их заменой . Левая -часть руки — это \(InfoValue:\)\s.*
, которая соответствует литеральной строке InfoValue:
(, захватывающей ее из-за круглых скобок ), затем пробел (\s
, GNU-изм, который, вероятно, исходит из Perl ), затем что угодно(.*
)до конца строки. \1
в замене ссылается на первую захваченную группу (, единственную здесь ), а пространство является буквальным пространством. Поскольку группа захвата соответствует литеральной строке, на самом деле ее не нужно захватывать, одна и та же строка может повторяться с правой стороны -. Но, конечно, делая это таким образом, вы избавляетесь от бесполезного повторения.
Таким образом, в любой строке, содержащей InfoValue:
, он удаляет все после нее.
Это для ввода, который sed
читает из канала, потому что это то, что sed
и каналы делают:sed
читает из стандартного ввода (, когда не указано имя файла ), и канал соединяет вывод команды левой руки -на стандартный ввод команды правой руки -.
То, что $1
справа, совершенно не связано с sed
. Это параметр оболочки, относящийся к первому аргументу командной строки скрипта. (Или функцию оболочки, если она используется внутри нее ). Если это часть скрипта, то он должен запускаться как whatever.sh somefile.pdf
и вызыватьpdftk
операцию dump_data
. на указанный файл.
Нет, команда sed
не имеет прямого отношения к предыдущей команде перед каналом. Команда sed
получает данные только на стандартный ввод. Дело не в sed
теории, а в основных принципах сценариев оболочки.
pdftk $1 dump_data
называет двоичный файл pdftk
(популярной программой для работы с PDF )с двумя аргументами. Первый аргумент — это то, что вы указали в качестве первого аргумента сценария оболочки.Второй аргумент pdftk
— это команда dump_data
.
Выход первой команды напрямую связан через канал -символ |
-со второй командой, которая является заменой sed
.
Любое вхождение строки InfoValue:
, за которой следует символ пробела \s
и любое количество других символов -, точка, означающая любой символ, и звездочка, означающая любое количество повторений, совпадают. Но в замене есть только первая часть (в паре скобок с обратной косой чертой ), за которой следует что-то белое. На самом деле непонятно, что должно быть после последнего обратного слэша. Final g
означает «заменить все вхождения».