使用sed -n和变量

时间:2013-04-01 10:44:14

标签: unix

我有一个日志文件a.log,我需要从中提取一条信息。 要找到模式的开始和结束行号,我使用以下内容。

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

我需要在以下命令中使用变量(start,end):

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

以便上面的命令显示如下:

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

我无法用变量替换行号。请建议正确的语法。

谢谢, 红润

2 个答案:

答案 0 :(得分:1)

当我意识到如何做到这一点时,我一直在寻找将行号放入包含所请求信息的文件中,并将该行中的文件显示为EOF。

所以,这是我的方式。

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

可以使用

检索$ PATTERN到$ INPUT_FILE的第一个匹配的行号
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>

答案 1 :(得分:0)

删除单引号。单引号关闭字符串的shell解析。您需要shell解析来执行变量字符串替换。

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