bash - 用另一个文件内容替换文件中的一行,但在匹配后放置内容 X 行
问题描述
我有一个文件要更新一些新数据。另一个文件中的新数据。我自己已经解决了这个问题。
但是,我的模式匹配后更新的文本需要 7 行
我通过执行 grep -A 7 命令进行了尝试,将其分配给 last_details。
这当然会将 7 行分配给一个变量(我猜是一个列表),所以它会给后面的 sed 带来问题。
last_details=$(grep -A7 ${last_string} /var/tmp/sym_links.ini.$$)
sed "/^${last_details}$/r ${tmp_symlinks_file_part_2}" /var/tmp/sym_links.ini.$$ > /var/tmp/sym_links.ini.$$.tmp2
所以我希望输出从
[DWH_DBSPACES_MAIN_10]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
至
[DWH_DBSPACES_MAIN_10]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
[DWH_DBSPACES_MAIN_11]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
但相反我得到了错误
sed: -e expression #1, char 24: unterminated address regex
解决方案
您的问题过于关注您想如何做,因此缺少有关您要做什么的信息。如果您只是想在文件中的其他文本块之后添加一个新的文本块,其中所有块都由空行分隔,那么这是如何做到的:
awk -v RS= -v ORS='\n\n' -F'\n' -v str='[DWH_DBSPACES_MAIN_10]' '
NR==FNR{new=$0; next} {print} $1==str{print new}
' newstuff file
例如使用这些输入文件:
$ cat file
[DWH_DBSPACES_MAIN_09]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
[DWH_DBSPACES_MAIN_10]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
[DWH_DBSPACES_MAIN_12]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
.
$ cat newstuff
[DWH_DBSPACES_MAIN_11]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
我们可以做的:
$ awk -v RS= -v ORS='\n\n' -F'\n' -v str='[DWH_DBSPACES_MAIN_10]' 'NR==FNR{new=$0; next} {print} $1==str{print new}' newstuff file
[DWH_DBSPACES_MAIN_09]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
[DWH_DBSPACES_MAIN_10]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
[DWH_DBSPACES_MAIN_11]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
[DWH_DBSPACES_MAIN_12]
Path=/eniq/database/dwh_main_dbspace/dbspace_dir_10/main_10.iq
Lun_ID=
Size=121668
Type=fs
Link=
Disk=
推荐阅读
- keras - keras fit 的输出是否显示平均损失?
- python - 如何正确规范我的嵌套 json?
- angular - NativeScript如何动态更新视图?
- c# - 你如何使用哈希集
在 C# 中使用二进制阅读器 - python - 如何将“askopenfilename”文件路径解析为另一个函数?
- web-scraping - jython htmlunit错误无法调用未定义的方法“then”
- xamarin - 检查 Ui-Test 中的控件属性
- swift - SwiftUI - 使用 AngularGradient 或 LinearGradient 填充
- javascript - 我的图像滑块的脚本不起作用
- mongodb - 在mongoose的顶部获取所选id的记录