Можете ли вы объяснить мне эту команду «sed» и помочь мне улучшить ее?

Судя по вашему предыдущему вопросу , кажется, что konsoleзвонит сам себе.

Я просматривал содержимое ~youruser/.config/konsolercи удалял его, чтобы решить проблему.

0
09.06.2021, 21:36
2 ответа
... | 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. на указанный файл.

2
28.07.2021, 11:26

Нет, команда sedне имеет прямого отношения к предыдущей команде перед каналом. Команда sedполучает данные только на стандартный ввод. Дело не в sedтеории, а в основных принципах сценариев оболочки.

  1. pdftk $1 dump_dataназывает двоичный файл pdftk(популярной программой для работы с PDF )с двумя аргументами. Первый аргумент — это то, что вы указали в качестве первого аргумента сценария оболочки.Второй аргумент pdftk— это команда dump_data.

  2. Выход первой команды напрямую связан через канал -символ |-со второй командой, которая является заменой sed.

  3. Любое вхождение строки InfoValue:, за которой следует символ пробела \sи любое количество других символов -, точка, означающая любой символ, и звездочка, означающая любое количество повторений, совпадают. Но в замене есть только первая часть (в паре скобок с обратной косой чертой ), за которой следует что-то белое. На самом деле непонятно, что должно быть после последнего обратного слэша. Final gозначает «заменить все вхождения».

2
28.07.2021, 11:26

Теги

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