在 AIX 服务器中使用 Sed -i 选项。函数无法解析 aix

Posted

技术标签:

【中文标题】在 AIX 服务器中使用 Sed -i 选项。函数无法解析 aix【英文标题】:Using Sed -i option in AIX servers. function cannot be parsed aix 【发布时间】:2021-03-21 15:34:05 【问题描述】:

我正在尝试解析 AIX 服务器中的文件。我可以在 Ubuntu 中命名。

由于-i 选项不起作用,我使用了一个临时文件并将其重命名为原始文件。请让我知道我在哪里遗漏了一些东西。

我必须在文件中找到一个模式,并在该模式的上方或下方添加一行。

sed '/ServiceNow (TAM):/i myline1' filename > temp_file && mv temp_file filename

实际使用的命令:

sed '/ServiceNow (TAM)/i servicenow.test..ersngrouplist.0=Test' /itim/data/testfile > temp_properties && mv temp_properties /itim/data/testfile

错误: sed: Function /ServiceNow (TAM)/i servicenow.test..ersngrouplist.0=无法解析测试。

请帮助我如何更改此命令以获取

我的期望:

myline1 ServiceNow (TAM): //模式 myline2

【问题讨论】:

抱歉,信息不够。我们需要一些 actual 示例数据、您键入的 actual 命令以及 actual 错误/输出。理想情况下,尽可能简短 (minimal reproducible example)。发布伪代码 ("pattern" / "new_line" 并说“它失败了”并不能告诉我们任何事情,我们无法以这种方式为您提供帮助。 感谢您的建议。我已经更新了实际命令。现在会有帮助吗 这能回答你的问题吗? Insert newline using sed. 只是一个想法...在使用 "awkward" Unix 平台时(不想让任何人感到羞耻,但我的意思是 HP-UX、AIX 和 Tru64)我通常发现 Perl 在它们之间更加一致,并一次又一次地求助于 Perl 以获得全面有效的解决方案。 Tim Maher 的优秀著作 “Minimal Perl” 讨论了 awksedgrep 的所有变体,并展示了如何克服 Perl 的差异。 【参考方案1】:

问题是sed 的POSIX 版本不接受i 命令在同一行上带有附加文本。您需要在i 之后放置一个\,并将要插入的文本放在下一行。

sed '/ServiceNow (TAM)/i\
servicenow.test..ersngrouplist.0=Test'

来自 GNU sed 的错误消息比 AIX 的有用得多!

$ sed --posix '/ServiceNow (TAM)/i servicenow.test..ersngrouplist.0=Test'
sed: -e expression #1, char 21: expected \ after `a', `c' or `i'

【讨论】:

以上是关于在 AIX 服务器中使用 Sed -i 选项。函数无法解析 aix的主要内容,如果未能解决你的问题,请参考以下文章

AIX 上的 sed 正则表达式问题(第 2 部分)

AIX 的等效 sed linux 命令

AIX 的 XL 编译器的 -qfuncsect 选项的 gcc 等效选项是啥?

如何在 AIX 中使用 GCC 编译器链接 *.so 文件

sigsegv 发生在 posix_memalign 在某些设备中释放后立即发生并在 AIX 中编译选项

在 AIX/bash 上的 bash 循环中读取文件比在 Linux/ksh 中慢得多 - BLOCKSIZE?