Linux обрезать строку до символа

cut command in Linux with examples

The cut command in UNIX is a command for cutting out the sections from each line of files and writing the result to standard output. It can be used to cut parts of a line by byte position, character and field. Basically the cut command slices a line and extracts the text. It is necessary to specify option with command otherwise it gives error. If more than one file name is provided then data from each file is not precedes by its file name.

cut OPTION. [FILE]. 

Let us consider two files having name state.txt and capital.txt contains 5 names of the Indian states and capitals respectively.

$ cat state.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh

Without any option specified it displays error.

$ cut state.txt cut: you must specify a list of bytes, characters, or fields Try 'cut --help' for more information.

Options and their Description with examples:

1. -b(byte): To extract the specific bytes, you need to follow -b option with the list of byte numbers separated by comma. Range of bytes can also be specified using the hyphen(-). It is necessary to specify list of byte numbers otherwise it gives error. Tabs and backspaces are treated like as a character of 1 byte.

List without ranges $ cut -b 1,2,3 state.txt And Aru Ass Bih Chh List with ranges $ cut -b 1-3,5-7 state.txt Andra Aruach Assm Bihr Chhtti

It uses a special form for selecting bytes from beginning upto the end of the line:

In this, 1- indicate from 1st byte to end byte of a line $ cut -b 1- state.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh In this, -3 indicate from 1st byte to 3rd byte of a line $ cut -b -3 state.txt And Aru Ass Bih Chh

2. -c (column): To cut by character use the -c option. This selects the characters given to the -c option. This can be a list of numbers separated comma or a range of numbers separated by hyphen(-). Tabs and backspaces are treated as a character. It is necessary to specify list of character numbers otherwise it gives error with this option.

$cut -c [(k)-(n)/(k),(n)/(n)] filename

Here,k denotes the starting position of the character and n denotes the ending position of the character in each line, if k and n are separated by “-” otherwise they are only the position of character in each line from the file taken as an input.

$ cut -c 2,5,7 state.txt nr rah sm ir hti

Above cut command prints second, fifth and seventh character from each line of the file.

$ cut -c 1-7 state.txt Andhra Arunach Assam Bihar Chhatti

Above cut command prints first seven characters of each line from the file.

Читайте также:  Calculate linux scratch edition

Cut uses a special form for selecting characters from beginning upto the end of the line:

$ cut -c 1- state.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh Above command prints starting from first character to end. Here in command only starting position is specified and the ending position is omitted. $ cut -c -5 state.txt Andhr Aruna Assam Bihar Chhat Above command prints starting position to the fifth character. Here the starting position is omitted and the ending position is specified.

3. -f (field): -c option is useful for fixed-length lines. Most unix files doesn’t have fixed-length lines. To extract the useful information you need to cut by fields rather than columns. List of the fields number specified must be separated by comma. Ranges are not described with -f option. cut uses tab as a default field delimiter but can also work with other delimiter by using -d option.
Note: Space is not considered as delimiter in UNIX.

$cut -d "delimiter" -f (field number) file.txt

Like in the file state.txt fields are separated by space if -d option is not used then it prints whole line:

$ cut -f 1 state.txt Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh

If -d option is used then it considered space as a field separator or delimiter:

$ cut -d " " -f 1 state.txt Andhra Arunachal Assam Bihar Chhattisgarh
Command prints field from first to fourth of each line from the file. Command: $ cut -d " " -f 1-4 state.txt Output: Andhra Pradesh Arunachal Pradesh Assam Bihar Chhattisgarh

4. –complement: As the name suggests it complement the output. This option can be used in the combination with other options either with -f or with -c.

$ cut --complement -d " " -f 1 state.txt Pradesh Pradesh Assam Bihar Chhattisgarh $ cut --complement -c 5 state.txt Andha Pradesh Arunchal Pradesh Assa Biha Chhattisgarh

5. –output-delimiter: By default the output delimiter is same as input delimiter that we specify in the cut with -d option. To change the output delimiter use the option –output-delimiter=”delimiter”.

$ cut -d " " -f 1,2 state.txt --output-delimiter='%' Andhra%Pradesh Arunachal%Pradesh Assam Bihar Chhattisgarh

Here cut command changes delimiter(%) in the standard output between the fields which is specified by using -f option .

Читайте также:  Kali linux создать файл

6. –version: This option is used to display the version of cut which is currently running on your system.

$ 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.

Applications of cut Command

1. How to use tail with pipes(|): The cut command can be piped with many other commands of the unix. In the following example output of the cat command is given as input to the cut command with -f option to sort the state names coming from file state.txt in the reverse order.

$ cat state.txt | cut -d ' ' -f 1 | sort -r Chhattisgarh Bihar Assam Arunachal Andhra

It can also be piped with one or more filters for additional processing. Like in the following example, we are using cat, head and cut command and whose output is stored in the file name list.txt using directive(>).

$ cat state.txt | head -n 3 | cut -d ' ' -f 1 > list.txt $ cat list.txt Andhra Arunachal Assam

Thanks Saloni Gupta for providing more examples.

Источник

Как извлечь часть строки в Bash

Необходимо из строки вырезать подстроку определённой длины. Это можно сделать в терминале. Можно указать позицию начального символа в строке и её длину.

Самый простой способ — это использовать команду cut:

С опцией -c команда cut указываются номер первого и последнего символа включительно для вырезаемой подстроки.

Если вы используете Bash (обычно так и есть), то в нём предусмотрены другие способы как вырезать подстроку из строки.

Обратите внимание, что ПАРАМЕТР — это НЕ строка из которой вы хотите извлечь подстроку, это имя переменной!

Рассмотрим следующий пример:

То есть переменной a присвоено значение abcdefghij и из того значения во второй строке вырезается подстрока, которая начинается с пятого символа и заканчивается последним символом.

Читайте также:  Command line parser linux

Если указать ДЛИНУ, то можно вырезать строку определённой длины, начинающейся с определённого символа:

Если нужно заменить подстроку на строку используйте:

Если нужно удалить статичную строку:

Пример с удалением префикса:

Пример с удалением суффикса:

Связанные статьи:

Источник

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
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
)">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

Источник

Оцените статью
Adblock
detector