linux - 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
解决方案
你是对的,因为你理解错了。Sed 确实不应该覆盖输入文件,因此,正如您所猜测的,您必须将输出重定向(管道)到不同的文件,例如:
sed 's/fr/us/' /etc/default/keyboard > keyboard2
然后移动keyboard2
到/etc/default/keyboard
(不要忘记制作原始文件的备份副本,以防万一)。
推荐阅读
- sql - 在计数中使用星号和表别名 T-SQL
- python - 导入时无法通过在windows中双击打开python文件
- excel - 从VBA中的地址中提取第一列号
- c++ - 赋值运算符是否调用复制构造函数?
- java - Javafx中的倒计时与最大化
- azure - WSO2 与 Azure AD 集成 - 访问 https://outlook.office365.com/api/v2.0/me 时出现 403
- tensorflow - Training multiple models defined from the same class in Tensorflow 2.0 fails when using @tf.function
- mysql - Laravel 7 has('relation') with pagination 减慢查询速度
- c# - 将两种方法合二为一(泛型?)
- c++ - 使用加载项的 Office 菜单控制