1

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

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

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

谢谢,罗西

4

2 回答 2

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`

并且输出文件将是从 $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>
于 2014-09-03T20:40:13.577 回答
0

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

sed -n '('$end'+1)q;'$start','$end''p orig-data-file > new-file
于 2013-04-01T10:50:26.117 回答