2013-04-01 33 views
1

我有一個日誌文件a.log,我需要從中提取一條信息。 要找到我使用以下模式的模式的開始和結束行號碼。在變量中使用sed -n

start=$(sed -n '/1112/=' file9 | head -1) 
end=$(sed -n '/true/=' file9 | head -1) 

我需要在下面的命令來使用這些變量(開始,結束):

sed -n '16q;12,15p' orig-data-file > new-file 

,使上面的命令看起來是這樣的:

sed -n '($end+1)q;$start,$end'p orig-data-file > new-file 

我不能用變量替換行號。請建議正確的語法。

謝謝, 玫瑰色

回答

0

從而卸下單引號。單引號關閉字符串的shell解析。您需要使用shell解析來執行可變字符串替換。

sed -n '('$end'+1)q;'$start','$end''p orig-data-file > new-file 
1

當我意識到如何做到這一點,我一直在尋找反正讓行號到包含請求的信息文件,並顯示該行EOF文件。

所以,這是我的方式。

與$ PATTERN的第一場比賽到$ INPUT_FILE的

PATTERN="pattern" 
INPUT_FILE="file1" 
OUTPUT_FILE="file2" 

行號可以用

LINE=`grep -n ${PATTERN} ${INPUT_FILE} | awk -F':' '{ print $1 }' | head -n 1` 

檢索和OUTFILE將是從$ LINE到EOF文本。通過這種方式:

sed -n ${LINE},\$p ${INPUT_FILE} > ${OUTPUT_FILE} 
  • 這裏的關鍵,是如何變量可以用命令的使用方式SED -n:

首先使用變量使用變量

sed -n 'N,$p' <file name> 

不用其他

LINE=<N>; sed -n ${LINE},\$p <file name>