我有一个日志文件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
我无法用变量替换行号。请建议正确的语法。
谢谢, 红润
答案 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 '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