首页 > 解决方案 > sed 命令不修改文件

问题描述

我复制/etc/default/keybord并制作一个keyboard2文件。

当我 cat 文件时,我得到:

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="fr"
XKBVARIANT=""
XKBOPTIONS=""

BACKSPACE="guess"

然后我sed s/fr/us/ keyboard2立即显示:

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="us"
XKBVARIANT=""
XKBOPTIONS=""

BACKSPACE="guess"

但是当我cat keyboard2再次,我得到:

# KEYBOARD CONFIGURATION FILE

# Consult the keyboard(5) manual page.

XKBMODEL="pc105"
XKBLAYOUT="fr"
XKBVARIANT=""
XKBOPTIONS=""

BACKSPACE="guess"
                  

用 sudo 测试,测试把's/fr/us/'

我理解错了吗?sed 应该写入文件还是我需要管道并覆盖原始文件?谢谢

版本:

sed (GNU sed) 4.7
Linux kali 5.9.0-kali5-amd64 #1 SMP Debian 5.9.15-1kali1 (2020-12-18) x86_64 GNU/Linux in Oracle Virtual Box

标签: linuxsedtext-manipulation

解决方案


你是对的,因为你理解错了。Sed 确实不应该覆盖输入文件,因此,正如您所猜测的,您必须将输出重定向(管道)到不同的文件,例如:

sed 's/fr/us/' /etc/default/keyboard > keyboard2

然后移动keyboard2/etc/default/keyboard(不要忘记制作原始文件的备份副本,以防万一)。


推荐阅读