第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何獲取與正則表達(dá)式匹配的第一行之后的文件部分?

如何獲取與正則表達(dá)式匹配的第一行之后的文件部分?

互換的青春 2019-12-09 11:17:55
我有一個(gè)約有1000行的文件。我想要文件的與我的grep語(yǔ)句匹配的行之后的部分。那是:$ cat file | grep 'TERMINATE'     # It is found on line 534因此,我希望文件從535行到1000行進(jìn)行進(jìn)一步處理。我怎樣才能做到這一點(diǎn)?
查看完整描述

3 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

下面將打印匹配的行,TERMINATE直到文件末尾:


sed -n -e '/TERMINATE/,$p'

說(shuō)明: 在執(zhí)行腳本后-n禁用默認(rèn)行為,即sed在每行上執(zhí)行腳本后將其打印出來(lái),-e指示腳本為sed,/TERMINATE/,$是地址(行)范圍的選擇,這意味著第一行與TERMINATE正則表達(dá)式(如grep)匹配的文件($) ,p是用于打印當(dāng)前行的打印命令。


這將從 匹配行之后的行開(kāi)始打印,TERMINATE直到文件末尾:(

從匹配行之后到EOF,不包括匹配行)


sed -e '1,/TERMINATE/d'

說(shuō)明: 1,/TERMINATE/是地址(行)范圍的選擇,表示與TERMINATE正則表達(dá)式匹配的第一行輸入的第一行,并且d是刪除當(dāng)前行并跳至下一行的delete命令。由于sed默認(rèn)行為是打印行,因此它將在TERMINATE 輸入結(jié)束之后打印行。


編輯:


如果您想在之前的行TERMINATE:


sed -e '/TERMINATE/,$d'

并且如果您希望TERMINATE一次通過(guò)兩個(gè)不同文件中的前后兩行:


sed -e '1,/TERMINATE/w before

/TERMINATE/,$w after' file

之前和之后文件將包含帶有terminate的行,因此要處理每個(gè)文件,您需要使用:


head -n -1 before

tail -n +2 after

編輯2:


如果您不想對(duì)sed腳本中的文件名進(jìn)行硬編碼,則可以:


before=before.txt

after=after.txt

sed -e "1,/TERMINATE/w $before

/TERMINATE/,\$w $after" file

但是然后您必須轉(zhuǎn)義$最后一行的含義,以便外殼程序不會(huì)嘗試擴(kuò)展$w變量(請(qǐng)注意,我們現(xiàn)在在腳本周?chē)褂秒p引號(hào)而不是單引號(hào))。


我忘了告訴新行在腳本中的文件名之后很重要,以便sed知道文件名結(jié)束。



編輯: 2016-0530


SébastienClément問(wèn):“如何TERMINATE用變量替換硬編碼?”


您將為匹配的文本創(chuàng)建一個(gè)變量,然后以與前面的示例相同的方式進(jìn)行操作:


matchtext=TERMINATE

before=before.txt

after=after.txt

sed -e "1,/$matchtext/w $before

/$matchtext/,\$w $after" file

在前面的示例中將變量用于匹配文本:


## Print the line containing the matching text, till the end of the file:

## (from the matching line to EOF, including the matching line)

matchtext=TERMINATE

sed -n -e "/$matchtext/,\$p"

## Print from the line that follows the line containing the 

## matching text, till the end of the file:

## (from AFTER the matching line to EOF, NOT including the matching line)

matchtext=TERMINATE

sed -e "1,/$matchtext/d"

## Print all the lines before the line containing the matching text:

## (from line-1 to BEFORE the matching line, NOT including the matching line)

matchtext=TERMINATE

sed -e "/$matchtext/,\$d"

在這些情況下,用變量替換文本的要點(diǎn)是:


[ ]中$variablename包含的變量()不會(huì)“擴(kuò)展”,但[ ]中的變量會(huì)“擴(kuò)展” 。因此,如果所有包含要用變量替換的文本,則必須將所有更改為。 single quotes'double quotes"single quotesdouble quotes

該sed范圍也包含$并緊跟像字母:$p,$d,$w。他們也將像變量加以擴(kuò)展,所以你要逃避這些$字符用反斜杠[ \],如:\$p,\$d,\$w。


查看完整回答
反對(duì) 回復(fù) 2019-12-09
?
慕婉清6462132

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊

作為一個(gè)簡(jiǎn)單的近似值,您可以使用


grep -A100000 TERMINATE file

它會(huì)抓緊TERMINATE并在該行之后輸出最多100000行。


從手冊(cè)頁(yè)


-A NUM, --after-context=NUM


匹配行后打印NUM行尾隨上下文。 在連續(xù)的匹配組之間放置包含組分隔符(-)的行。使用-o或--only-matching選項(xiàng),此選項(xiàng)無(wú)效,并給出警告。


查看完整回答
反對(duì) 回復(fù) 2019-12-09
?
蕪湖不蕪

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超7個(gè)贊

在這里使用的工具是awk:


cat file | awk 'BEGIN{ found=0} /TERMINATE/{found=1}  {if (found) print }'

這是如何運(yùn)作的:


我們將變量“找到”設(shè)置為零,評(píng)估為假

如果找到與正則表達(dá)式匹配的“ TERMINATE”,則將其設(shè)置為1。

如果我們的“找到”變量的值為T(mén)rue,請(qǐng)打印:)

如果您在非常大的文件上使用其他解決方案,則可能會(huì)占用大量?jī)?nèi)存。


查看完整回答
反對(duì) 回復(fù) 2019-12-09
  • 3 回答
  • 0 關(guān)注
  • 965 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)