不按预期更换

时间:2017-12-04 22:58:46

标签: linux bash sed

为什么我输入的输出与输入相同,而我期待'搜索替换主题'作为输出:

x="search='some thing' replace='something' subject=/path"

echo $x
echo "$x" | sed 's/\(\w+\)=/\1\n/g'

1 个答案:

答案 0 :(得分:2)

默认情况下,{{ dd(App\User::whereHas('roles', function($q) { $q->where('name', '=', 'rprm'); })->orderByRaw('substring_index(TRIM(name), " ", 1)')->pluck('name', 'id')) }} 使用旧式正则表达式。如果你想要新的风格(又名“扩展”)正则表达式,你应该使用sed。无论如何,你正在使用旧式和新式正则表达式的混合,这些正则表达式永远不会起作用(你不能同时sed -r ... \(\));所以

+

sed -e 's/\(\w\+\)=/\1\n/g'

以上任何一种都会产生

sed -re 's/(\w+)=/\1\n/g'

如果您实际上期望输出为search 'some thing' replace 'something' subject /path ,那么

search replace subject

即删除所有等号的匹配,然后按

  • sed -re "s/=('[^']*'|[^']\\S*)//g" 任意数量的非'和最终'
  • 一系列1个或多个非空白的序列,以'以外的任何内容开头。

(但这与原始问题中的正则表达式无关。我无法将所需的输出与问题中的正则表达式联系起来。)