【问题标题】:Does the file need to be closed after modifying with 'sed'?使用'sed'修改后是否需要关闭文件?
【发布时间】:2013-06-13 22:02:04
【问题描述】:

我有一个 shell 脚本,其中包含一个 sed 命令,用于插入现有文件:

sed -i "/<test name=\"test-$NUMBER\">/i $NEW_TEST_SUITE" test.xml

运行这个shell脚本后,我在Notepad++中打开了test.xml文件,之前确实有新行插入:

<test name="test-XXXX"> 

但是,当我尝试进行漂亮的打印时(通过单击 CTRL+ALT+SHIFT+B)并保存该文件,它会弹出一个警告说:

请检查此文件是否在其他程序中打开

所以我在想这可能是由于修改文件而不关闭文件造成的吗?使用sed后需要关闭文件吗?如果是这样,你能告诉我命令是什么,因为我已经在网上搜索但没有找到任何关于此的内容? (我的平台是 Windows 7)

【问题讨论】:

  • 您使用的是什么版本的 sed?你说Win7,但sed不是Win7的一部分。你在用 MinGW 吗?赛格温?其他?此外,也没有 /i 修饰符,因为我假设您使用的是 gnu,所以它将是 /I
  • @Adrian,嗨,我正在使用 Cygwin

标签: windows bash shell


【解决方案1】:

没有。当 sed 退出时,文件被关闭。

这可能是权限问题。验证您的 Windows 用户是否具有对该文件的写入权限。

如果它在 Windows 分区上,请尝试以管理员身份运行 Notepad++。如果它在 Linux 共享 fs 上,请尝试 chmod

【讨论】:

  • 错误信息Please check if this file is opened in another program表示文件已打开,而不是权限问题。
  • 另外,如果权限不正确,您可能需要查看运行 shell 脚本的用户,因为 sed 能够修改文件但 Notepad++ 不能。否则,您可能会在其他地方出现问题。除非需要,否则您不应以管理员权限运行。
【解决方案2】:

不,sed 不会保持文件打开。脚本完成后,所有打开的文件都将关闭。

尝试使用Process Explorer 查找打开文件的进程。使用 Ctrl-F 查找附加到您遇到问题的文件的打开句柄。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 2020-03-14
    相关资源
    最近更新 更多