I have the string xyz
which is a line in file1.txt
, I want to copy all the lines after xyz
in file1.txt
to a new file file2.txt
. How can I achieve this?
I know about cat
command. But how to specify the starting line?
I have the string xyz
which is a line in file1.txt
, I want to copy all the lines after xyz
in file1.txt
to a new file file2.txt
. How can I achieve this?
I know about cat
command. But how to specify the starting line?
To copy all lines after xyz
, try:
sed '0,/xyz/d' file1.txt >file2.txt
1,/xyz/
specifies a range of lines starting with the first and ending with the first occurrence of a line matching xyz
. d
tells sed to delete those lines.
Note: For BSD/MacOS sed, one can use sed '1,/xyz/d' file1.txt >file2.txt
but this only works if the first appearance of xyz
is in the second line or later. (Hat tip: kusalananda.)
Another approach, as suggested by don_crissti, should work for all sed:
{ printf %s\\n; cat file1.txt; } | sed '1,/xyz/d' >file2.txt
Consider this test file:
$ cat file1.txt
a
b
xyz
c
d
Run our command:
$ sed '1,/xyz/d' file1.txt >file2.txt
$ cat file2.txt
c
d
The same logic can used with awk:
awk 'NR==1,/xyz/{next} 1' file1.txt >file2.txt
NR==1,/xyz/{next}
tells awk to skip over all lines from the first (NR==1
) to the first line matching the regex xyz
. 1
tells awk to print any remaining lines.
sed '0,/xyz/d
then sed '1,/xyz/d
. Whcih one is correct?
– user9371654
Mar 16 '19 at 20:54
sed '0,/xyz/d
. If you have BSD sed (default MacOS), then use { printf %s\\n; cat file1.txt; } | sed '1,/xyz/d' >file2.txt
.
– John1024
Mar 16 '19 at 22:14
With ed
:
ed -s file.txt <<< $'/xyz/+1,$w file2.txt'
This sends one (ranged) command to ed
: from the line after (+1
) the one containing xyz
until the end of the file ($
), w
rite those lines to file2.txt
.
$ sed -n '/xyz/,$p' file.txt > file2.txt
With -n
we prevent sed
to print every line. With $
means end of file end p
stands for print line. So /xyz/$p
means: If a line matches xyz
print it until the end of the file.
xyz
, not from the line after.
– Kusalananda
Mar 09 '19 at 22:02
xyz
line or exclude it from being copied ? Also, what happens if you have multiple lines matchingxyz
? – don_crissti Mar 09 '19 at 21:44