我想使用诸如sed
或awk
之类的Unix命令将字符串"#DONE"
附加到尚未包含字符串{{}的文本文件的第一行的末尾。 1}}。
例如,输入文件类似于
"#DONE"
,所需的输出将是
qsub job1.sh #DONE
qsub job2.sh #DONE
qsub job3.sh
qsub job4.sh
我对这种类型的脚本没有经验,而且我已经搜索过,但无法在SO上找到确切的解决方案。
答案 0 :(得分:3)
O(n*logn)
方法:
Awk
输出:
awk '!f && !/#DONE$/{ $0=$0 "#DONE"; f=1 }1' file
答案 1 :(得分:2)
这可能适合你(GNU sed):
sed '/#DONE$/!{s/$/#DONE/;:a;n;ba}' file
将#DONE
附加到没有它的第一行,然后打印文件的其余部分。
答案 2 :(得分:2)
另一个awk
awk -v k="#DONE" '$NF!=k && !c++{$++NF=k}1' file
!c++
将确保仅执行一次,$++NF=k
增加字段数,并将最后一个字段设置为该值。
答案 3 :(得分:0)
管道aproach grep -nrv -m1 "#DONE" "file" | awk -F ":" '{print $2}' | xargs -I {} awk 'FNR=={},FNR=={}{$3="#DONE"};1' "$1" >tmp && mv tmp "file"
是您的文件(放置两次)
"data": {
"title": "stack",
"notes": "asdsad",
"time": "19:02",
"meridian": "PM",
"type": "Education",
"_id": "5a2f02d3bba3640337bc92c9",
"days": {
"Monday": true,
"Tuesday": false,
"Wednesday": false,
"Thursday": false,
"Friday": false,
"Saturday": false,
"Sunday": false
}
}
只要您不完全是#DONE,这将有效。
如果发生这种情况,文件将被清空:-)
尚未想出那个