Linux Shell中,sed重定向到文件自身的原理。

作者&投稿:语俗 (若有异议请与网页底部的电邮联系)
帮忙写个Linux下shell脚本,(使用sed命令处理hosts文件)~

#下面是脚本内容,注意修改/etc/hosts文件需要超级用户权限,换句话说,你需要sudo执行本脚本。



#!/bin/bash
DELIM="'"
N=2

echo "Please pull the file to me."
#read storepath1
storepath1="/etc/hosts"

storepath1=`echo "$storepath1" | cut -d "$DELIM" -f $N`

#这个好理解:
#1.把不是以#号开头的行替换为以!!@开头
#2.把以#号开头的行的 #号删除
#3.把!!@替换为# 号

#sed -i -r -e '/^#/! s|^|!!@|' -e 's|^#||' -e 's|^!!@|#|' "$storepath1"

#这个精炼些
#如果行以 #号开头,则删除#。
# 如果刚刚进行了删除操作,那么执行t 操作,跳到sed脚本末尾,结束操作。
# 如果刚刚没有进行删除操作,那么继续执行s|^|#|,将开头添加 #号。

#sed -i -r -e 's|^#||;t;s|^|#|' "$storepath1"

#这个匹配3位数+点开头的行
#原理同上,只不过不是处理每一行,而是处理以三位数加点号开头的行。

sed -i -r -e 's|^#([0-9]{3}\.)|\1|;t;s|^([0-9]{3}\.)|#\1|' "$storepath1"

re.sh:#只需要在脚本中写这一行就可以了 -i可以修改原文件sed -i 's/define VER 0/define VER $1/' cc.c

Shell的原因,用>重定向  到输入文件,会先把文件清空,

和sed无关,awk、cat等都可以试试,也是空文件比如:

cat data.txt >data.txt       #也是得到空文件

> 文件名

文件名不存在,先新建;文件名存在,先清空——这一部分先执行。




南县15549546182: Linux Shell中,sed重定向到文件自身的原理. -
邲胡凡乐: Shell的原因,用>重定向 到输入文件,会先把文件清空,和sed无关,awk、cat等都可以试试,也是空文件比如:1 catdata.txt >data.txt #也是得到空文件 > 文件名文件名不存在,先新建;文件名存在,先清空——这一部分先执行.

南县15549546182: linux里面的sed命令怎么用,做什么的?请详细说明 -
邲胡凡乐: sed 编辑器是 Linux 系统管理员的工具包中最有用的资产之一 Linux 操作系统最大的一个好处是它带有各种各样的实用工具.存在如此之多不同的实用工具,几乎不可能知道并了解所有这些工具.可以简化关键情况下操作的一个实用 工具是 sed...

南县15549546182: linux命令 sed 请问有哪位大大知道这个sed 命令是什么意思吗? sed 's/\//\\\//g' -
邲胡凡乐: 截取或修改字符串,打印到屏幕上. 使用方法:sed 参数 '动作' 动作对象 如果用-i参数将修改文档的内容,你的sed 's/\//\\\//g'这个我举一个类似的再分析你的. sed 's/old/new/g' *** 这个就是把***文档里面的old这个词换成new这个词. 你的sed ...

南县15549546182: linux shell编程sed用法 -
邲胡凡乐: sed比较难 awk则很好解决

南县15549546182: shell中执行sed命令 -
邲胡凡乐: sed 's/book[^s]/books/g' file 这样做有两个问题:1. 不会替换第一次books的book2. 如果是以book结尾,不会替换book 我还没想到好的解决方法

南县15549546182: 如何使用linux的sed命令进行变量数据修改 -
邲胡凡乐: 用双引号就行了(单引号会屏蔽 $ 对shell变量的取值功能) sed "s/$bsed/$a/g" filename >result

南县15549546182: linux shell sed命令与转义字符 -
邲胡凡乐: 不需要转义,可以更改定界符.例如:A=“2013/06/09“ sed “s#hello#$A#" 将定界符改为#就可以了.望采纳,谢谢支持!

南县15549546182: linux shell sed 使用 -
邲胡凡乐: -n就不说了,自己man去吧.'s/.*:::\([0-9]*\)\ .* \ \([0-9]*\)\/sshd/\1 \2/p's表示替换,将.*:::\([0-9]*\)\ .* \ \([0-9]*\)\/sshd替换为 \1 \2, p好像打印吧.*:::\([0-9]*\)\ .* \ \([0-9]*\)\/sshd 表示为匹配下面的内容:“.*”任意字符或串后跟“:::”,然...

南县15549546182: shell编程中的sed问题 -
邲胡凡乐: line1=`sed -n -e '/^labA/=' file|head -n 2|tail -n 1`line2=`sed -n -e '/^labB/=' file|head -n 2|tail -n 1`获取第二个匹配的2行行号,获取之间的数据sed "${line1},${line2}p" file

南县15549546182: linux shell 脚本里 怎么用 cat 命令 读取 一个文件的内容 然后用 sed命令 替换 -
邲胡凡乐: sed -i s/zhengshu/"`cat ca.crt`"/g xl.sql就可以了,只要ca.crt里面没有/字符也没有换行就可以了.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网