Удалить часть строки линукс

Shell script : How to cut part of a string

I pasted the contents of your example into a file named so.txt .

$ cat so.txt | awk '< print $7 >' | cut -f2 -d" mt24">
)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this answer" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f2.5%2f" data-se-share-sheet-license-name="CC BY-SA 2.5" data-s-popover-placement="bottom-start">Share
)" title="">Improve this answer
answered Sep 18, 2010 at 15:46
4
    Thaks this is exactly what I wanted !
    – deimus
    Sep 18, 2010 at 16:00
    1
    useless use of cat and cut. awk can do all of it.
    – ghostdog74
    Sep 19, 2010 at 14:57
    4
    @user229426: You mean unnecessary use of cat and cut, not useless, don't you?
    – Manoj Govindan
    Sep 20, 2010 at 5:00
    This is a great explanation of using awk in combination with cut. I tried to get this exact thing for another use case and struggled a lot with awk man pages and awk tutorials. Thanks a lot for taking the time to explain your code!
    – Kevin G.
    Dec 22, 2015 at 12:28
Add a comment|
3

Use a regular expression to catch the id number and replace the whole line with the number. Something like this should do it (match everything up to "id mt24">

)" data-controller="se-share-sheet" data-se-share-sheet-title="Share a link to this answer" data-se-share-sheet-subtitle="" data-se-share-sheet-post-type="answer" data-se-share-sheet-social="facebook twitter devto" data-se-share-sheet-location="2" data-se-share-sheet-license-url="https%3a%2f%2fcreativecommons.org%2flicenses%2fby-sa%2f2.5%2f" data-se-share-sheet-license-name="CC BY-SA 2.5" data-s-popover-placement="bottom-start">Share
)" title="">Improve this answer
)">edited Sep 18, 2010 at 16:12
answered Sep 18, 2010 at 15:51
2
    this method gives 9 and 1 but it should be 9 and 10
    – deimus
    Sep 18, 2010 at 15:57
    Right, I've made a mistake when pasting the sed line. Updated it to work correctly.
    – bluebrother
    Sep 18, 2010 at 16:12
Add a comment|
2

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!

Источник

Читайте также:  Rar архиватор linux mint
Оцените статью
Adblock
detector