我在传递参数的函数中有一个sed表达式。
const range = ([min, max]) => {
let arr = [];
for (var i = min; i <= max; i++) arr.push(i);
return arr;
};
const gcd = (a, b) => !b ? a : gcd(b, a % b);
const lcm = (a, b) => (a * b) / gcd(a, b);
const smallestCommons = (arr) => range(arr).reduce((acc, cur) => acc = lcm(acc, cur), arr[0]);
console.log(smallestCommons([1, 3])); // 6
console.log(smallestCommons([1, 6])); // 60
我正在尝试在搜索字符串下方插入空白行,并在其后插入插入字符串。
如此
insert_after_new_line() {
if ! grep -q "${2}" "${3}"; then
sed -i "/${1}/{N;N;a ${2}}" "${3}"
fi
}
insert_after_new_line search insert textfile.txt
成为
text
text
search
text
但我不断收到错误消息
sed:-e表达式#1,字符0:不匹配的`{'
答案 0 :(得分:3)
我对此进行了测试。在命令行中工作
sed -i '/search/a \\ninsert' file
答案 1 :(得分:1)
sed
确实用换行符分隔命令。有一个;
,但是它不适用于所有命令,大多数命令都以文件名作为参数。 ;
不适用于r
R
或例如a
。 sed将在a
命令之后读取所有内容,因此sed解释就像a ${2}}
作为单个命令一样,结果它找不到包围}
的内容,因为它被a
吞噬了命令。您需要换行符:
sed -i "/${1}/{N;N;a ${2}
}" "${3}"
或
sed -i "/${1}/{N;N;a ${2}"$'\n'"}" "${3}"
答案 2 :(得分:1)
这应该有效:
sed -i '/search/{G;ainsert
}' file
您可以使用shell变量替换文本,但也可以将双引号替换为单引号。