Linux对文件操作的命令--sed
将内容写入文件
将内容写入文件并覆盖之前的所有内容
echo "这是要写入并覆盖文件内容的内容" > fileName
将内容写入文件以追加的方式追加在文件的最后一行
echo "这是追加到文件最后一行的内容" >> fileName
将内容写入到文件指定内容
将内容写入到指定内容的上一行
sed -i '/指定内容/i\新内容' fileName
# 上面的-i 代表直接修改文件内容,否则只会在控制台输出预计修改之后的内容
将内容写入到指定内容下一行
sed -i '/指定内容/a\新内容' fileName
修改指定内容
sed -i 's/旧内容/新内容/g' fileName
# 直接将就内容替换成了新内容
如果修改的内容为多行可以指定开始行的开始内容和结束行的开始内容然后将中间的内容修改成新的内容
sed '/开始内容/,/结束内容/{//!d}; /开始内容/a 新内容' fileName
# `/开始内容/,/结束内容/`: 匹配“开始内容”到“结束内容”之间的所有行。
# `{//!d}`: 对于范围内的非起止行(即“开始内容”和“结束内容”之间的行),使用 d 命令删除它们。
# `/开始内容/a 新内容`: 在“开始内容”的下一行插入“新内容”。
如果修改的内容还包括开始内容和结束内容所在的行
sed '/开始内容/,/结束内容/c\新内容' fileName
# `/开始内容/,/结束内容/`: 匹配从“开始内容”到“结束内容”之间的所有行,包括这两个标记。
# `c\新内容`: 将整个匹配范围替换为“新内容”。
如果匹配的内容有多行,可以选择在匹配到第一个替换之后直接退出,默认会全部替换
sed '/开始内容/,/结束内容/c\新内容; q' example.txt
# 注意: sed 默认处理所有匹配的范围。如果您只想替换第一次匹配的内容,可以使用 q 命令在首次替换后退出
如果匹配的内容,开始内容或者结束内容之间有内容和开始内容在一行里面,但是我不要吧开始内容去掉,但是同一行的其他内容需要去掉
示例场景
开始内容 some data to remove
middle content
结束内容
sed -e '/开始内容/s/\(开始内容\).*/\1/' -e '/开始内容/,/结束内容/{//!d;}' -e '/结束内容/d' 文件名
# `/开始内容/s/\(开始内容\).*/\1/`: 这一部分匹配到 "开始内容" 行,将其后的所有内容删除,仅保留 "开始内容"。
# `/开始内容/,/结束内容/{//!d;}`: 这一部分删除 "开始内容" 和 "结束内容" 之间的所有行(不包含这两行)。
# `/结束内容/d`: 删除包含 "结束内容" 的行。
修改同一行里面的其他内容比如properties文件里面的等号后面的内容
示例场景
model=standalone
将上面的模式改为集群模式 cluster
sed -i 's/^model=.*/model=cluster/' fileName