A perl-solution:
perl -nE 'say $1 if /id=(\d+)/' filename
Источник
Команда cut в Linux
Команда cut вырезает участки каждой строки файла и выводит результаты в стандартный поток вывода. Она может вырезать часть строки по расположению байта, символу и полю. В сущности она разрезает строку на участки и извлекает из них текст. С этой командой обязательно нужно указывать опции, иначе она выдаст ошибку. Если указать несколько файлов, то при выводе данных имена файлов перед ними не выводятся. Команда работает как с файлами так и с выводом из другой команды.
Синтаксис
Допустим, у нас есть файл state.txt, содержащий названия 5 государств:
$ cat state.txt Россия Германия Нидерланды Соединенное Королевство Испания
Если опций не указывать, то команда выдаст ошибку:
$ cut state.txt cut: you must specify a list of bytes, characters, or fields Try 'cut --help' for more information.
Опции и их описания с примерами
1. -b (byte, байт): используется для извлечения заданных байтов, номера которых указываются после опции через запятую. Можно указать диапазоны через дефис. Если не указать ничего, команда выдаст ошибку. Символы табуляции и пробелы рассматриваются как символы размером в один байт.
$ cut -b 1,2,3 state.txt Рос Гер Нид Сое Исп
$ cut -b 1-3,5-7 state.txt Росия Герани Нидрла Соеине Испния
echo Россия | cut -b 1,2,3 Рос
Для выбора байтов от заданной позиции до конца строки используется следующая форма:
$ cut -b 1- state.txt Россия Германия Нидерланды Соединенное Королевство Испания
Аналогичным образом можно указать байты от начала строки до заданной позиции:
$ cut -b -3 state.txt Рос Гер Нид Сое Исп
2. -c (column, столбец): используется для вырезания по символам. Это также может быть список символов, указанных через запятую, или диапазон, заданный через дефис. Символы табуляции и пробела интерпретируются как один символ. Номера символов указывать обязательно, иначе команда выдаст ошибку.
где k – начальный символ, а n – конечный, если они разделены дефисом, либо просто позиции символов, указанные через запятую.
Следующая команда вырезает второй, пятый и седьмой символы строк:
$ cut -c 2,5,7 state.txt ои еаи ира оие сня
А эта команда – выводит первые семь символов каждой строки файла:
$ cut -c 1-7 state.txt Россия Германи Нидерла Соедине Испания
Интервалы от заданной позиции до конца строки и от начала строки до заданной позиции задаются аналогично предыдущей опции:
$ cut -c 1- state.txt Россия Германия Нидерланды Соединенное Королевство Испания
$ cut -c -5 state.txt Росси Герма Нидер Соеди Испан
3. -f (field, поле): опция -с полезна для строк фиксированной длины, однако в большинстве файлов они не встречаются. Вам потребуется вырезать данные по полям, а не по столбцам, чтобы получить нужную информацию. Для этого используется опция -f. Номера полей должны разделяться запятыми. Данная опция не позволяет указывать диапазоны. По умолчанию в качестве разделителя полей используется символ табуляции, но при помощи опции -d можно задать другой разделитель.
Важно: по умолчанию пробел не является разделителем.
$cut -d "разделитель" -f (номер поля) файл
В файле state.txt поля разделены пробелами, и если не использовать опцию -d, строки будут выводиться целиком:
$ cut -f 1 state.txt Россия Германия Нидерланды Соединенное Королевство Испания
При помощи опции -d можно задать в качестве разделителя пробел:
$ cut -d " " -f 1 state.txt Россия Германия Нидерланды Соединенное Испания
Было выведено каждое слово до пробела.
4. –complement: используется с другими опциями, например, -f или -c, и инвертирует опции вывода:
$ cut --complement -d " " -f 1 state.txt Россия Германия Нидерланды Королевство Испания
$ cut --complement -c 5 state.txt Росся Гермния Ниделанды Соедненное Королевство Испаия
5. –output-delimiter: По умолчанию разделитель выводимых данных такой же, как указанный в опции -d. Чтобы его изменить, воспользуйтесь опцией –output-delimiter. Следующая команда задает в качестве разделителя вывода символ «%» и выводит 1 и 2 поля с опцией -f:
$ cut -d " " -f 1,2 state.txt --output-delimiter='%' Россия Германия Нидерланды Соединенное%Королевство Испания
6. –version: Выводит информацию о версии команды:
$ cut --version cut (GNU coreutils) 8.26 Packaged by Cygwin (8.26-2) Copyright (C) 2016 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later . This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Written by David M. Ihnat, David MacKenzie, and Jim Meyering.
7. –help: Выводит справочную информацию.
Еще несколько полезных примеров
ifconfig eth0 | grep HWaddr | cut -d » » -f 11
Заключение
Команда cut очень простая, но широко используется для работы с текстовыми данными, часто в сочетании с другими командами, такими как cat или sort. Мы разобрали практически все ее опции. Однако, в разных системах версии команды и ее опции могут немного отличаться, для уточнения обратитесь к соответствующим man-страницам.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Похожие записи:
Источник
How to delete a substring using shell script
-F. means split the string by . and $1 means the first column.
If these strings are stored in a file (let's call it input_file ):
# input_file: abc.out abc.out abc.out def.out def.out def.out
And this will remove any occurrence of the substring .out from that file.
Explanation:
- sed : invoke the sed tool to edit streams of text
- -i : use the "in-place" option - this modifies the input file you provide it instead of writing output to stdout
- 's/\.out//g' : Use regular expression to delete .out . the g at the end means delete all occurrences.
- input_file : specify the input file
If these strings are stored in variables:
Explanation:
- From the above link: "$ Remove from $var the shortest part of $Pattern that matches the back end of $var."
- Note that the "pattern" mentioned here is called globbing, which is different from regular expression in important ways.
@WilliamPursell I guess that depends on exact input of his files: you are right, I should make my assumptions more clear.
I found this worked best because the pattern you want to use can be in a variable:
DATA="abc.out" pattern=".out" DATA=$ echo "DATA=$"
$ foo=abc.def.out $ echo $ abc.def
In general, to delete the shortest suffix, use:
To delete the longest suffix, use
@not2savvy The OP used the word "substring", but is clearly asking only to delete suffixes. Shall we take all questions literally? I estimate that at least 85% of all questions asked are stated incorrectly. If answered literally, the answers would all be useless.
I think he’s not „clearly asking only to delete suffixes“, bzt he just gave that as one example of what he’s asking for. Perhaps I’m wrong. However, an answer that gives a more general approach is obviously useful for more people. Just saying!
Источник