【问题标题】:trying to extract character string out of a line containing another character string using sed尝试使用 sed 从包含另一个字符串的行中提取字符串
【发布时间】:2012-07-17 01:29:22
【问题描述】:

我有一个如下所示的文件:

$variable['keyword1']   = 'value1';
$variable['keyword2']   = 'value2';
$variable['keyword3']   = 'value3';
$variable['keyword4']   = 'value4';

关键字 1-4 都是唯一的,只是字母和数字。

值 1-4 可能是唯一的,也可能不是唯一的,可以是字母、数字、特殊字符的任意组合

我需要能够提取 value1value2value3value4 并将其保存为 $一些变量。所以关键字显然是我需要在 sed 命令中定义的东西,以便我得到所需的值。我将如何使用 sed one 衬垫来做到这一点?对我来说看起来并不难,但我似乎无法破解它。几个小时以来一直在谷歌上搜索并尝试不同的组合。

【问题讨论】:

  • 所以您希望value1从一个填充了不同的文件中取出?

标签: sed extract


【解决方案1】:
sed -n "s/\$\w\+\['keyword1'\]\s*=\s*'\([^']\+\)';/\1/p" inputfile

保存:

somevariable=$(sed -n "s/\$\w\+\['keyword1'\]\s*=\s*'\([^']\+\)';/\1/p" inputfile)

如果你的文件和你描述的完全一样,你也可以使用这个:

grep keyword1 inputfile | sed "s/.*=\s*'\([^']\+\)';/\1/"

或者更好:(感谢威廉)

sed "/keyword1/s/.*=\s*'\([^']\+\)';/\1/" inputfile

【讨论】:

  • 你成功了。似乎工作完美。没想到这么快就有答案了。不能感谢你。是的,该文件与描述的完全相同,但我更喜欢使用 sed,因为我尝试将其用于所有脚本。
  • 没有必要(永远)将 grep 传递给 sed。而不是grep foo | sed 's/a/b/',而是sed '/foo/s/a/b/'
猜你喜欢
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
  • 1970-01-01
  • 2017-06-16
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
相关资源
最近更新 更多