sed:时间戳格式的内插变量



我想使用 sed 从文件中提取两个特定字符串之间的所有行。我需要在脚本上执行此操作,我的两个字符串是变量。字符串将采用某种时间戳格式,这意味着它们可以是这样的: 2014/01/012014/01/01 08:01

我正在尝试这样的东西:

sed -n '/$1/,/$2/p' $file

甚至

sed -n '/"$1"/,/"$2"/p' $file

没有运气,还尝试用;替换/作为分隔符。

我很确定问题是由于输入变量中的/和空白造成的,但我无法弄清楚正确的语法。

使用备用正则表达式分隔符的语法为:

\ c 正则表达式 c

匹配与正

则表达式正则表达式匹配的行。 c 可以是任何字符。

https://www.gnu.org/software/sed/manual/sed.html#Addresses

因此,请选择以下之一

sed -n '@'"$1"'@,@'"$2"'@p' "$file"
sed -n "\@$1@,\@$2@p" "$file"
sed -n "$( printf '@%s@,@%s@p' "$1" "$2" )" "$file"

或awk

awk -v start="$1" -v end="$1" '$0 ~ start {p=1}; p; $0 ~ end {p=0}' "$file"

第一个 $1 到最后一个 $2:

sed -n "\@$1@,$p" "$file" | tac | sed -n "\@$2@,$p" | tac

这将从第一个 $1 打印到末尾,反转行,从第一个 $2 打印到新结尾,然后再次反转行。

一个例子:从第一个"5"到最后一个"7"

$ set -- 5 7
$ seq 20 | sed -n "\@$1@,$p" | tac  | sed -n "\@$2@,$p" | tac
5
6
7
8
9
10
11
12
13
14
15
16
17

尝试使用双引号而不是单引号

sed -n "/$1/,/$2/p" $file

相关内容

  • 没有找到相关文章

最新更新