- 北营
-
通常,我们使用sed进行变量替换的时候,替换和被替换变量都是hard-coded的。例如:
sed -n ‘/comm/p" /tmp/test.log
如果我们用一变量var,它的值根据上下文变化
$ var=”comm”,定义了变量,那么我们在sed的使用中这样使用变量
$ sed -n ‘/"”$var”‘/p" /tmp/test.log
注意,是用单引号包含双引号来引用变量。
最初接触这个命令的人,可能以为$var之前的单引号会结束当前的script,其实不会。
若要在文本中匹配一个范围的话,可以使用的sed匹配
$ sed -n
‘/"”$var_start”‘/{p;:a;n;/"”$var_end”‘/p;ba}" /tmp/test.log
-n 关闭sed的默认输出
/$var_start/ 当数据行中查找到字符串$var_start
时开始工作,后面的是命令组{}
p; 打印出$var_start 这一行
:a 定义一个标签,名称为a
n;
读取下一行
/$var_end/p; 当读入的这一行中查找到$var_end 字符串时,输出
ba 跳转到标签a
其实有个问题,应该适时跳出的,不然要等文件全部读取完,效率低了。自己改吧
- 北境漫步
-
使用sed进行变量替换的时候,替换和被替换变量都是hard-coded的。
sed -n ‘/comm/p" /tmp/test.log
如果我们用一变量var,它的值根据上下文变化
$ var=”comm”,定义了变量,那么我们在sed的使用中这样使用变量
$ sed -n ‘/"”$var”‘/p" /tmp/test.log
注意,是用单引号包含双引号来引用变量。最初接触这个命令的人,可能以为$var之前的单引号会结束当前的script,其实不会。
若要在文本中匹配一个范围的话,可以使用的sed匹配
$ sed -n
‘/"”$var_start”‘/{p;:a;n;/"”$var_end”‘/p;ba}" /tmp/test.log-n 关闭sed的默认输出
/$var_start/ 当数据行中查找到字符串$var_start
时开始工作,后面的是命令组{}
p; 打印出$var_start 这一行
:a 定义一个标签,名称为a
n;
读取下一行
/$var_end/p; 当读入的这一行中查找到$var_end 字符串时,输出
ba 跳转到标签a
如果在sed命令使用环境变量
1、sed命令使用双引号的情况下,可以使用$var(变量)直接引用:echo|sed"s/^/$RANDOM.rmvb_/g"13562.rmvb_2、sed命令使用单引号的情况下,可以使用""$var""引用(单引号,然后双引号,变量):echo|sed"s/^/""$RANDOM"".rmvb_/g"2442.rmvb_sed中执行外部命令。1、sed命令使用单引号的情况下使用"`shellcommand`"或者"$(shellcommand)"引用命令执行的结果:echo|sed"s/^/"`echo$RANDOM`".rmvb_/g"7700.rmvb_#结果#上面的命令使用了旧式的命令替换,也可以采用新式的命令替换方法,如下:echo|sed"s/^/"$(echo$RANDOM)".rmvb_/g"13856.rmvb_#结果#下面例子取用当前日期作为结果的一部分,如下:echo|sed"s/^/"$(date+"%Y%m%d")".rmvb_/g"20130401.rmvb_#结果2、sed命令中使用双引号的情况下,直接`shellcommand`或者$(shellcommand)引用命令执行。echo|sed"s/^/$(date+"%Y%m%d").rmvb_/g"20130401.rmvb_#结果#使用环境变量$RANDOM以及旧式命令替换的例子:echo|sed"s/^/`echo$RANDOM`.rmvb_/g"29484.rmvb_#结果总结一下在sed语句里面,变量替换或者执行shell命令,双引号比单引号少绕一些弯子;所以,sed和变量的关键词搜索的结果,众多都写上替换单引号为双引号。2023-06-12 00:16:531
sed中的替换能用变量吗
在使用sed对日志或者其它文本进行parse的过程当中,有时候我们需要引用外部变量的值,或者获取一个shell命令执行的结果,以便达到更加可观的输出结果。这里介绍如何做到。sed中使用变量替换1.sed命令使用双引号的情况下,使用$var直接引用$ echo|sed "s/^/$RANDOM.rmvb_/g" 29328.rmvb_如果替换的变量内容中含有/符号则会提示如下错误,如查找当前目录下的目录文件并将相对路径替换为绝对路径find . -type f | sed -n "s/./$PWD/p"sed: -e expression #1, char 19: unknown option to `s"从语法上看,没有任何问题;但由于变量中包含有“/”作为分隔符,这会和sed的替换操作的分隔符“/”引起混淆;所以,只要不使用“/”做分隔符就可以解决这个问题,如果使用“%”而不是“/”来作为sed的替换操作的分隔符,就不会出错。其实使用#或%或;作为分隔符也是可以的,只要不会与替换中有相同的而且不是元字符的特殊符号都是可以的;使用时可以根据情况灵活选择。find . -type f | sed -n "s%.%$PWD%p"find . -type f | sed -n "s#.#$PWD#p"# 上面例子引用了一个环境变量$RANDOM的值2.sed命令使用单引号的情况下,使用""$var""引用类似,我们可以看到$ echo|sed "s/^/""$RANDOM"".rmvb_/g" 31338.rmvb_sed中执行外部命令1.sed命令使用单引号的情况下使用"`shell command`"或者"$(shell command)"引用命令执行的结果还是以上面案例分析,例子如下$ echo|sed "s/^/"`echo $RANDOM`".rmvb_/g" 8063.rmvb_# 上面的例子使用了旧式的命令替换,也可以采用新式的命令替换方法,如下$ echo|sed "s/^/"$(echo $RANDOM)".rmvb_/g" 18554.rmvb_# 下面例子取用当前日期作为结果的一部分,如下$ echo|sed "s/^/"$(date +"%Y%m%d")".rmvb_/g" 20120108.rmvb_2.sed命令使用双引号的情况下直接`shell command`或者$(shell command)引用命令执行的结果类似的,双引号的情况,如下$ echo|sed "s/^/$(date +"%Y%m%d").rmvb_/g" 20120108.rmvb_# 使用环境变量$RANDOM以及旧式命令替换的例子$ echo|sed "s/^/`echo $RANDOM`.rmvb_/g" 4988.rmvb_总结在sed语句里面,变量替换或者执行shell命令,双引号比单引号少绕一些弯子2023-06-12 00:17:021
获取sed执行之后的结果赋值给变量
var=" apple and 123 " f4=`$var | sed -i "s/[ ]*//g" | sed -i "s/[;]*//g"` echo "f4=="$f4 echo "ff==="$var | sed -e "s/[ ]*//g" | sed -e "s/[;]*//g" message=`echo "${var}" |sed s/[[:space:]]//g` echo "message=="$message显示结果 f4== ff===appleand123 message==appleand123 sed将去掉空格之后的结果直接赋值给变量,但是变量日志输出的时候是什么内容的 后面又找了一下以前的sed相关资料 sed 是多用于对文件的操作 获取返回的结果直接的就是 使用echo输出的值赋值message;2023-06-12 00:17:081
sed参数是变量,变量中有特殊字符,如何处理
我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下: 1)截取test.xml文件起始行到行,保存到tmp文件; 2)将要添加的内容根据变量值展开,附加写入tmp文件; 3)截取test.x.2023-06-12 00:17:361
如何在sed中使用变量
sed -i "s/qweqwe/$a/g" file双引号就可以了如果是单引号:sed -i "s/qweqwe/"$a"/g" file2023-06-12 00:17:421
如何用sed命令插入一个变量
不懂你在说什么2023-06-12 00:17:501
shell脚本sed命令如何使用变量替换掉包含指定字符串的整行
sed "s/zip/$zip/g" filesed双引号可以识别变量2023-06-12 00:18:072
sed 命令 怎样处理有包含转义字符的变量
我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下: 1)截取test.xml文件起始行到行,保存到tmp文件; 2)将要添加的内容根据变量值展开,附加写入tmp文件; 3)截取test.x.2023-06-12 00:18:521
sed删除以某变量开头的一行
sed -i /"^$ip/d" /etc/hosts2023-06-12 00:19:001
SHELL中SED如何获取变量的值???
用双引号就可以了, sed "/13/a ${AAA}"。单引号不转义引号内的任何字符,所有字符都取字面值。2023-06-12 00:19:141
如何用sed替换指定行字符串的值变量
就是引号不匹配的问题(在单引号里就不能再出现单引号了),改成下面的就行了。 sed -i "s/${1}BaseAddress/$Base/g"2023-06-12 00:19:211
SHELL中SED如何获取变量的值???
用双引号就可以了, sed "/13/a ${AAA}"。单引号不转义引号内的任何字符,所有字符都取字面值。2023-06-12 00:19:291
怎么把Sed的输出放到shell的变量中来
变量名=`sed命令` 其中`为键盘中1(不是数字小键盘中的1)左边那个键怎么把Sed的输出放到shell的变量中来2023-06-12 00:19:361
sed -n "$ip" 文件名 返回的字符串怎么赋值给一个变量?
首先你需要了解STRING的格式,在STEP7在线帮助中INDEX输入STRING可获得详情。STRING[n]本身属于复杂数据类型,其字节长度为n+2。如果你的n为2的话字节长度为4,可以直接用MOVE来进行操作。如 L DB1.DBD0 T DB2.DBD0超过4个字节可以分批使用MOVE指令,或者使用SFC20(BLKMOV)进行批量赋值。另外你说想把S1的初值传送到DB2.DBD0中,初值只是相对离线声明而言,对于程序操作的就是DB的实际数值。2023-06-12 00:19:482
如何在grep,sed等正则表达式中引用使用shell变量
ps aux|grep ^"$(whoami)"ps aux|grep ^"$(id -u )"ps aux|grep ^"$(id -u $(whoami))"其中$(id -u )可以使用`id -u`代替!2023-06-12 00:20:041
sed如何替换中文变量
单个中文字符的正则 [u4e00-u9fa5] ,多个字符后面加上加号+2023-06-12 00:20:341
请教sed替换中变量有空格的问题
换中变量有空格的2023-06-12 00:20:422
shell sed命令删除指定行,匹配字符用变量替代,变量包含"/"和" "
改成这样就可以了:A="/usr/sbin/control.sh --start"sed -i "/$A/d" cmd.cfg2023-06-12 00:20:501
Sed 删除匹配行,匹配的字符用Shell变量替换,且变量里含有斜杠“/”时,无法删除
sed -i "/[$name]/d" hello2023-06-12 00:20:582
linux怎么重定向一个变量的值到一个文本的头部,sed只能导入一行,我需要的变量的值有很多行,怎么解决?
添加到头部要用 临时文件 。假设临时文件名为 file.tmp 输出文件为file 。echo $a>file.tmpecho $b 若干变量 >>file.tmpcat file>>file.tmprm -f filemv file.tmp file2023-06-12 00:21:091
新手用bash的sed这样替换怎么不成功呢?
这样写会有一些问题。首先,sed命令中使用双引号包含的字符串会把其中的特殊字符(如换行符)当作普通字符处理,而不会按照其原本的含义进行处理。因此,在您的代码中,替换的字符串中的换行符不会起作用。其次,您将两个变量($old 和 $new)用在了 sed 命令的替换模式(s///)中,但是没有在前面加上$符号来引用它们。由于没有这个符号,shell 会把这些变量名当作普通字符串处理,并不会替换为它们所代表的值。为了解决这些问题,可以按照下面的方式修改代码:#!/bin/bashread -r -d "" old << EOMrdf:Alt<rdf:li xml:lang="x-default">秋季</rdf:li>EOMread -r -d "" new << EOMrdf:Alt<rdf:li xml:lang="x-default">New_冬季</rdf:li>EOMsed -i "s/${old}/${new}/g" *.xmp这样,您的代码就能够正常工作了。2023-06-12 00:21:252
怎么将变量内容追加到文件的倒数第二行
用命令sed -i "$i ""$new_line""" your_file就可以了,其中 new_line是你要添加的变量的名字, your_file是你要添加的文件的名字。之前唯一的答案貌似不好使,题主是想要把变量的内容加到第二行吧。2023-06-12 00:21:341
linux变量字符串替换问题
这个是很复杂的, 要用到很多命令,这样吧。发私信来看看?2023-06-12 00:22:271
Linux下的shell编程 如何替换文件中的内容
试试sed、awk!2023-06-12 00:22:375
Pyp–一个替代sed,awk的文本处理工具
Linux上文本处理工具虽不少,像cut,tr,join,split,paste,sort,uniq,sed,awk这些经典工具让人眼花缭乱,而且都太老了,使用方法都不太人性化,尤其awk,语法简直反人类;所以perl,python,ruby等脚本语言相当热火,我倾向用python,但处理一些简单任务python写的还是比较麻烦,无法一行命令解决,直到我发现了它- Pyp ! Pyp(Pyed piper)–一个python写的类似sed,awk的文本处理工具,简单优雅而强大~ ** 安装:** ubuntu官方源就有: aptitude install pyp 基本使用: echo ‘string" | pyp “命令” 变量p: 将每行作为一个字符串,p就是这这个字符串,python的字符串方法都可以用,譬如字符替换: cat test.txt |pyp "p.replace("123","abc")" 变量pp: 将整个文本当做一个列表,每行是个列表元素,列表方法都可以使用,譬如行排序: cat test.txt |pyp "pp.sort()" 管道: pyp的命令可以内嵌管道,此时管道后p或pp代表前一个命令的输出,类似unix下的标准管道: echo "FOO IS AN " | pyp p.replace("FOO","THIS")|p+"EXAMPLE"" 这个例子通过管道将replace后的字符串再当做p,增加了额外字符串"EXAMPLE" 分割: echo /this/is/a/splitting/example | pyp "p.split("/")" 将产生一个有序号的输出 算数运算: echo "qwe665" | pyp "(int(p[3:]) + 1)" 同时处理两个文本: 使用“–text_file”标识可以操处理第二个文本,类似于”p”"pp”,第二个文本行和整体用变量”fp”"fpp”替代: cat a.txt | pyp "p + fp" --text_file b.txt 正则表达式: pyp也支持正则,p.re(正则表达式)就行 cat a.txt | pyp "p.replace(p.re("^#.*"),"")" 这句就删掉所有注释行 PYP参考手册: 特殊变量: p pp original //original line by line input to pyp o //same as original sp //second steam line input, just like p, but from all non-flag arguments AFTER pyp quote u200b//a literal ” (double quotes can"t be used in a pyp expression) paran u200b//a literal ‘ dollar u200b//a literal $ n u200b u200b u200b//line counter (1st line is 0, 2nd line is 1,…use the form “(n+3)” to modify this value. nk u200b u200b//n + 1000 date u200b u200b//date and time. Returns the current datetime.datetime.now() object. pwd u200b u200b//present working directory history u200b//history array of all previous results: so pyp “a|u|s|i|h[-3]” shows eval of s h u200b u200b u200b//same as history letters u200b//abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ digits u200b//0123456789 punctuation //!”#$%&"()*+,-./:;<=>?@[]^_{|}~` 与split和join有关的变量: s OR slash //p split/joined on “/” d OR dot //p split/joined on “.” w OR whitespace //p split on whitespace (on spaces,tabs,etc), joined on spaces u OR underscore //p split/joined on ‘" c OR colon //p split/joined on ‘:" mm OR comma //p split/joined on ‘," m OR minus //p split/joined on ‘-" a OR all //p split on [" "-=$...] (on “All” metacharacters) 与p有关变量: p.dir path DIRECTORY p.file path FILE p.ext path EXTENSION 行级操作: pyp “p” //直接打印各行 pyp “p +"FOO"” //每行append字符串 pyp “p +"FOO"| p + o” //append的新字符串再与老字符串做操作 pyp “p.replace(‘FOO","GOO")” //字符串替换 pyp “p.kill(‘GOO")” //删除特定字符串 string substitution pyp “‘%s FOO %s %s GOO"%(p,p,5)” pyp “p.split(‘FOO")” ` //分割成列表 pyp “slash“ //用"/"分割成列表的简写 pyp “slash[0]” u200b u200b u200b//用"/"分割成列表并选取第一列 pyp “s[2:6]” //用"/"分割成列表并选取多列 pyp “s[2:6] | s” u200b u200b u200b//用"/"分割成列表并选取多列再用"/"拼接 echo ‘qwe665′ | pyp “(int(p[3:]) + 1)” //算数操作(要用()包围) pyp “p.replace(p.re(REGEX),STR)” //正则表达式 pyp “p.letters()” //只输出字符 pyp “p.digits()” //只输出数字 pyp “p.punctuation()” //只输出标点 pyp “p.clean(DELIM)” //处理乱码字符,将其替换为DELIM 文本当做列表操作: pyp “pp” u200b u200b//输出整个文本 pyp “pp.sort()” //排序 pyp “pp.uniq” //去重 pyp “pp.oneline” //合并所有列表元素到一行字符串,元素间以空格分开 pyp “pp.unlist()” //不知道什么意思 pp.divide(N) //每N个元素合并一个新列表 pyp “pp.before(‘FOO"[,n])” ////输出指定字符串的上面n行,默认为一行 pyp “pp.after(‘FOO"[,n])” //输出指定字符串的下面n行,默认为一行 pyp “pp.matrix(‘FOO"[,n])” //输出指定字符串的上下面各n行,默认为一行 pyp ”[x for x in pp]” //遍历列表 pyp “pp.sort() | p” //文本当做列表处理完再转换成文本 pyp “pp.delimit(DELIM)” //自定义分隔符而不是默认的换行符2023-06-12 00:23:021
shell基础应用(五)
一,正则表达式 w匹配数字、字母、下划线 egrep "roow" user //找roo后面是数字、字母、下划线的字符串 s 匹配空格、tab键 egrep "roos" user //找roo后面是1个空格或者tab键打出来的空格的字符串,如果没有 就不输出 二,sed其他指令 a行下追加 i行上添加 c替换整行 sed "a 666" user //所有行的下面追加666 sed "1a 666" user //第1行的下面追加666 sed "/^bin/a 666" user //在以bin开头的行的下面追加666 sed "i 666" user //所有行的上面添加666 sed "5i 666" user //第5行的上面添加666 sed "$i 666" user //最后1行的上面添加666 sed "c 666" user //所有行都替换成666 sed "1c 666" user //替换第1行为666 --------------------------------------------------------- 三,awk 可以实现精确搜索并输出 ,逐行处理 1,前置指令 | awk 选项 条件 指令 2,awk 选项 条件 指令 被处理文档 选项 -F 定义分隔符 指令 print 条件 /字符串/ 内置变量 $1第一列 $2第二列 $3第三列 ... $0 所有列 NR行号 NF 列号 [root@proxy opt]# cat abc.txt //准备素材 hello the world welcome to beijing awk "{print}" abc.txt //输出所有 awk "/to/{print}" abc.txt //输出有to的那行 awk "{print $2}" abc.txt //输出所有行的第2列 awk "/to/{print $1}" abc.txt //输出有to的那行的第1列 awk "{print $0}" abc.txt //输出所有行所有列 awk "{print $0,$1}" abc.txt //输出所有行所有列和第1列 awk "{print NR}" abc.txt //输出所有行的行号 awk "{print NR,$0}" abc.txt //输出所有行的行号,所有列 awk "{print NR,NF}" abc.txt //输出所有行的行号,列号(有几列) awk "/^bin/{print NR}" user //找以bin开头的行,显示该行的行号 awk "/^bin/{print NR,$0}" user //找以bin开头的行,显示该行的 行号,所有列 awk "{print NF}" user //输出所有行的列号(每行有几列) awk -F: "{print $1}" user //文档中如果没有空格,可以用F修改分 隔符 awk -F: "{print $1,$6}" user //使用冒号作为列的分隔符,显示 第1、6列 awk -F: "{print $1" 的家目录是 "$6}" user //还可以输出常量,加 双引号即可 awk -F: "{print $1" 的解释器是 "$7}" user 收集根分区剩余容量 df -h | awk "//$/{print $4}" //使用df -h 作为前置指令交给awk处理 找到以/结尾的行,并输出第4列 df -h | awk "//$/{print "根分区剩余容量是"$4}" //然后加常量输出 收集网卡流量信息 ifconfig eth0 | awk "/RX p/{print "eth0网卡接收的数量量是"$5}" ifconfig eth0 | awk "/TX p/{print "eth0网卡发送的数量量是"$5}" ------------------------------------------------------------ 四,awk的条件 1,/字符串/ 还可以使用正则 ~ 包含 !~不包含 awk -F: "$6~/root/{print}" user //输出第6列包含root的行 awk -F: "$6~/bin/{print}" user //输出第6列包含bin的行 awk -F: "$6!~/bin/{print}" user //输出第6列不包含bin的行 2,使用数字或者字符串 == != > >= < <= awk -F: "$3<3{print}" user //输出第3列小于3的行 awk -F: "$3<=3{print}" user //输出第3列小于等于3的行 awk -F: "NR==2{print}" user //输出第2行 awk -F: "NR>2{print}" user //输出行号大于2的行 3,逻辑组合 &&并且 ||或者 awk -F: "NR==2||NR==4{print}" user //找行号是2或者4的行 awk -F: "NR==2||NR==40{print}" user //如果只有一个条件满足就显示一个 awk -F: "$7~/bash/&&$3<=500{print}" user //找第7列包含bash并且第3列 小于等于500的行 awk "NR==2&&NR==4{print}" user //找行号既是2又是4的行,不存在,无输出 awk -F: "$7~/bash/&&NR<=3{print}" user //找第7列包含bash并且行号是1~3的 awk -F: "$7~/bash/||NR<=3{print}" user //找第7列包含bash或者行号是1~3的 awk -F: "$1~/root/" user //找第1列包含root的行 如果有用户叫root6,也会搜到,比较宽松的搜索方式,如果 任务就是{print}的话可以省略不写 awk -F: "$1=="root"" user //找第1列完全等于root的行 多一个字符少一个字符都不行,比较严格的搜索方式 4,运算 awk "NR%2==0{print NR,$0}" user //在条件中使用运算 ,找到将行号除以2余数等于0的行,然后输出该行的 行号和所有列,相当于输出偶数行 ----------------------------------------------------- 五,awk处理时机,可以执行额外任务 BEGIN任务 执行1次,读取文档之前执行 逐行任务 执行n次,读取文档时执行 END任务 执行1次,读取文档之后执行 BEGIN{ 任务1 }{ 任务2 }END{ 任务3 } awk -F: "BEGIN{print "ok"}{print $1}END{print "ok"}" user awk "BEGIN{print NR}{print NR}END{print NR}" user 利用awk处理时机,输出下列内容 awk "BEGIN{print "User UID Home"}" //第1步输出表头信息 awk -F: "{print $1" "$3" "$6}" user //第2步输出内容 awk "END{print "总计"NR"行" }" user //第3步输出结尾 awk -F: "BEGIN{print "User UID Home"}{print $1" "$3" "$6}END{print "总计"NR"行"}" user //合在一起写 --------------------------------------------------------------------------- 使用awk统计网站访问量 setenforce 0 //关闭selinux systemctl stop firewalld //关闭防火墙 systemctl restart httpd //开启网站服务 使用浏览器多访问几次网站,包括本机用curl curl 192.168.4.7:82 //如果端口没改过就不用敲 awk "{print $1}" /var/log/httpd/access_log //初步统计,不完美 六,使用awk数组+for循环实现高级搜索 数组 相当于可以存储多个值的特殊变量 数组名[下标]=下标对应的值 awk "BEGIN{a[1]=10;a[2]=20;print a[2],a[1]}" //使用awk测试数组,首先 创建数组a,下标1对应值是10,下标2对应值是20,然后输出下标是2与 下标是1的值 awk "BEGIN{a["abc"]="abcabc";a["xyz"]="xyzxyz";print a["xyz"]}" //数组的下标 和值都可以不是数字,测试时加双引号即可 以上信息是手工输入,实际情况中通常是从文档收集 准备一个文档,里面有6行,每行分别是abc、xyz、abc、opq、xyz、abc 然后 按照awk逐行处理的工作特点使用awk "{a[$1]++}" shu.txt 走完每一行得到下列结果 但不会输出到屏幕 a[$1]++ a[abc]++ a[abc]=1 a[$1]++ a[xyz]++ a[xyz]=1 a[$1]++ a[abc]++ a[abc]=2 a[$1]++ a[opq]++ a[opq]=1 a[$1]++ a[xyz]++ a[xyz]=2 a[$1]++ a[abc]++ a[abc]=3 如果要输出到屏幕可以使用命令awk "{a[$1]++}END{print a[abc]}" shu.txt ---------------------- 根据上述操作得知使用数组可以收集信息,但收集完了之后查看确不方便,可以用for循环实现。方法如下: for(变量名 in 数组名){print 变量名} //这个格式可以查看数组的所有下标 awk "{a[$1]++}END{for(i in a){print i,a[i]}}" shu.txt //使用逐行任务与数组 收集文档shu.txt中的信息,然后在END任务中使用for循环显示所有 数组a的下标与值 awk "{ip[$1]++}END{for(i in ip){print i,ip[i]}}" /var/log/httpd/ac cess_log //将上述的文件替换成网站的日志,就可以 最终用来查看日志得到可以得到哪个ip来访以及来访的次数 awk "{ip[$1]++}END{for(i in ip){print i,ip[i]}}" /var/log/httpd/ac cess_log | sort -nr -k 2 //使用sort命令增加排序 功能,-n是以数字形式排序,-r是降序, -k是指定为 第几列排序 ---------------------------------------------------------------------------- /var/log/secure是安全日志,如果有人登陆时输入错误密码的话 信息会记录下来,这种信息可以用awk抓取出来,方法如下: awk "/Failed password for root/{ip[$11]++}END{for(i in ip){print i,ip[i]}}" /var/log/secure //统计安全日志中访问root账户密码输入错误 的ip地址与次数 ----------------------------------------------------------------------------- 编写脚本,可以查看系统的各种参数信息 #!/bin/bash while : do clear free -h | awk "/^Mem:/{print "剩余内存容量是"$4}" df -h | awk "//$/{print "根分区剩余容量是"$4}" awk "END{print "用户总数是"NR"个"}" /etc/passwd who | awk "END{print "登录用户数量是"NR"个"}" uptime | awk "{print "cpu的15分钟平均负载是"$NF}" rpm -qa | awk "END{print "安装的软件包数量是"NR"个"}" sleep 3 done2023-06-12 00:23:091
关于dos命令中变量替换为一条语句的问题
只有使用FOR来实现,例如:FOR /F %i IN ("sed -n %delno%p baklist.ouT") DO SET del_name=%iECHO %del_name%注意单引号不能修改,是必须的。2023-06-12 00:23:161
如何用sed 替换某一列
我试着理解一下。比如现在是aa,bb你用sed替换成了haha,hehe.然后在运行一段时间后,想在自动变回aa,bb是吗?如果是多个参数,我觉得可以考虑数组来操作,也可以建立一个tmp文件预存一下先前的变量值等待提取。不知道我理解的是否正确。2023-06-12 00:23:231
shell中分割字符串之后怎么取得最后一个东西的值?如果可以的话,怎么将分割后的结果保存到一个数组中?
string="1:2:3:4:5:6:7"array=(${string//:/ }) #创建数组last_value=${array[${#array[*]}-1]} #获取最后一个元素2023-06-12 00:23:424
linux shell script 使用正则表达式替换查找文本
read shused -i "s#max-lease-time.*;#max-lease-time $shu;#g" dhcp.conf只给你写个例子2023-06-12 00:24:343
提高linux脚本cpu和内存使用率
因为CPU使用率不是程序而是操作系统内核来控制的,操作系统会根据你程序的需求分配CPU的使用率,需要的多,就分配的多,需要的少,就分配的少,因此,CPU使用率无法使用软件来提高。如果你的CPU占用率低于90%,那就说明你的脚本根本不需要那么多的CPU时间。2023-06-12 00:24:433
如何在sed中使用变量
sed "/^${id} / s/[^ ]*$/${newvaule}/g"输入变量id的值及其对应数据的新值newvalue即可。2023-06-12 00:25:132
如何在sed中使用变量
通常,我们使用sed进行变量替换的时候,替换和被替换变量都是hard-coded的。例如: sed -n ‘/comm/p" /tmp/test.log 如果我们用一变量var,它的值根据上下文变化 $ var=”comm”,定义了变量,那么我们在sed的使用中这样使用变量 $ sed -n ‘/"”$var”‘/p" /tmp/test.log 注意,是用单引号包含双引号来引用变量。 最初接触这个命令的人,可能以为$var之前的单引号会结束当前的script,其实不会。 若要在文本中匹配一个范围的话,可以使用的sed匹配$ sed -n ‘/"”$var_start”‘/{p;:a;n;/"”$var_end”‘/p;ba}" /tmp/test.log -n 关闭sed的默认输出/$var_start/ 当数据行中查找到字符串$var_start 时开始工作,后面的是命令组{}p; 打印出$var_start 这一行:a 定义一个标签,名称为an; 读取下一行/$var_end/p; 当读入的这一行中查找到$var_end 字符串时,输出ba 跳转到标签a 其实有个问题,应该适时跳出的,不然要等文件全部读取完,效率低了。自己改吧2023-06-12 00:25:201
如何在sed中使用变量?
通常,我们使用sed进行变量替换的时候,替换和被替换变量都是hard-coded的。例如:x0dx0ax0dx0ased-n‘/comm/p"/tmp/test.logx0dx0ax0dx0a如果我们用一变量var,它的值根据上下文变化x0dx0ax0dx0a$var=”comm”,定义了变量,那么我们在sed的使用中这样使用变量x0dx0ax0dx0a$sed-n‘/"”$var”‘/p"/tmp/test.logx0dx0ax0dx0a注意,是用单引号包含双引号来引用变量。x0dx0ax0dx0a最初接触这个命令的人,可能以为$var之前的单引号会结束当前的script,其实不会。x0dx0ax0dx0a若要在文本中匹配一个范围的话,可以使用的sed匹配x0dx0a$sed-nx0dx0a‘/"”$var_start”‘/{p;:a;n;/"”$var_end”‘/p;ba}"/tmp/test.logx0dx0ax0dx0a-n关闭sed的默认输出x0dx0a/$var_start/当数据行中查找到字符串$var_startx0dx0a时开始工作,后面的是命令组{}x0dx0ap;打印出$var_start这一行x0dx0a:a定义一个标签,名称为ax0dx0an;x0dx0a读取下一行x0dx0a/$var_end/p;当读入的这一行中查找到$var_end字符串时,输出x0dx0aba跳转到标签ax0dx0ax0dx0a其实有个问题,应该适时跳出的,不然要等文件全部读取完,效率低了。自己改吧2023-06-12 00:25:281
如何在sed中使用变量?
使用sed进行变量替换的时候,替换和被替换变量都是hard-coded的。2023-06-12 00:25:421
sed如何将一个变量替换另一个变量
就是引号不匹配的问题(在单引号里就不能再出现单引号了),改成下面的就行了。sed -i "s/${1}BaseAddress/$Base/g"2023-06-12 00:25:492
sed怎么添加行变量表示
1.sed命令使用单引号的情况下,可以使用""$var""引用(单引号,然后双引号,变量):2.sed命令中使用双引号的情况下,直接`shell command`或者$(shell command)引用命令执行。2023-06-12 00:25:561
如何使用linux的sed命令进行变量数据修改
用双引号就行了(单引号会屏蔽 $ 对shell变量的取值功能)sed "s/$bsed/$a/g" filename >result2023-06-12 00:26:031
sed的运行结果怎样赋值给变量
放在 $()中变量名=$(sed命令)2023-06-12 00:26:191
shell 中用sed作替换操作怎么使用变量
用双引号就行了(单引号会屏蔽$对shell变量的取值功能)sed"s/$bsed/$a/g"filename>result2023-06-12 00:26:251
求助 Shell中sed命令删除行时引用变量
假设文件名为test.txt即sed -e "1,${N}d" test.txt输出到标准输出,如果将内容修改即sed -e "1,${N}d" test.txt -i2023-06-12 00:26:341
linux里面怎么用sed命令修改文本的指定内容
我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下:1)截取test.xml文件起始行到<abcdef>行,保存到tmp文件;2)将要添加的内容根据变量值展开,附加写入tmp文件;3)截取test.xml文件</abcdef>行到结束行,附加写入tmp文件。4)移动tmp文件覆盖test.xml文件。2023-06-12 00:26:541
求助shell,字符串中的双引号包含变量,用sed整体替换
不完全是,是这样,IFS设置为空,IFS=;str=***aa"bb/cc1"ee***aa"bb/cc2"ee***;ff=4;num=2;for dd in $(seq $num) do echo $str |sed....... done2023-06-12 00:27:001
在linux中怎么用sed命令更改文档指定内容
我也给个思路吧 —— 用sed根据地址范围截取文件内容,用Here documents方法添加新的多行内容,然后重组文件。具体步骤如下:1)截取test.xml文件起始行到<abcdef>行,保存到tmp文件;2)将要添加的内容根据变量值展开,附加写入tmp文件;3)截取test.xml文件</abcdef>行到结束行,附加写入tmp文件。4)移动tmp文件覆盖test.xml文件。2023-06-12 00:27:081
WINCC变量参数E和I的区别,能更改吗
1、sed命令使用双引号的情况下,可以使用$var(变量)直接引用: echo | sed "s/^/$RANDOM.rmvb_/g" 13562.rmvb_ 2、sed命令使用单引号的情况下,可以使用""$var""引用(单引号,然后双引号,变量): echo | sed "s/^/""$RANDOM"".rmvb_/g" 2442.rmvb_ sed中执行外部命令。 1、sed命令使用单引号的情况下使用"`shell command`"或者"$(shell command)"引用命令执行的结果: echo | sed "s/^/"`echo $RANDOM`".rmvb_/g" 7700.rmvb_# 结果 # 上面的命令使用了旧式的命令替换,也可以采用新式的命令替换方法,如下: echo | sed "s/^/"$(echo $RANDOM)".rmvb_/g" 13856.rmvb_# 结果 # 下面例子取用当前日期作为结果的一部分,如下: echo | sed "s/^/"$(date +"%Y%m%d")".rmvb_/g" 20130401.rmvb_ # 结果2023-06-12 00:27:141
【黑苹果】macOS Catalina 下用 launchd 保存 nvram
本教程针对于无 nvram 的机型,为了黑苹果,使用某些奇技淫巧来固化自己的 nvram。 本教程仅适用于Clover,OC用户请参照官方文档 LogoutHook 和 OpenCore(OC)引导模拟NVRAM nvram 即非易失性随机存取储存器(Non-Volatile Random Access Memory),是一块 macOS 或者说白苹果机器用来存储一些希望能在关机之后保存下来少量数据的记忆体,这些数据包括亮度大小、音量大小等。但是对于很多Windows主机来说,主板上并没有 nvram 的设计。这导致了一些恼人的小问题,比如开机时亮度会变成最大值,而不是关机时设置的值,之类的。本教程将教你如何把 nvram 的内容保存在硬盘上,以便开机时读取。 声明: 这不是正确的保存 nvram 的方式,然而对于现代 macOS 来说,传统的 rc 脚本已经被弃用,所以我们需要将 rc 脚本改为 Launchd 的方式来在关机时调用保存 nvram 的脚本。这个方法对我来说可以用,但是不代表所有人都可以。如果你的黑苹果在使用了我的方法后出现了任何问题,本人概不负责。 本文根据 Reddit 社区的 The bodgers guide to getting NVRAM working 一文改编而来,原文需要一些上网技巧才能访问。 打开终端,输入以下命令 此处回显应为 接着重启你的电脑。 重启完成后再次打开终端,输入 如果你看到回显为 那么你可以关掉这篇文章了。 如果你的回显是空的,证明你的 nvram 没有正常工作,而这正是导致你的电脑亮度/音量每次重启都会重置为最大值的原因。 此时再放入 EmuVariableUefi-64.efi 我们接着往下看吧! 由于 macOS 在很久以前就弃用了 rc.local 的启动项管理方式,转而使用 launchd 作为启动项管理,因此我们需要使用 launchd 来控制脚本的执行。 又由于 launchd 的启动命令不能太长,所以我们将要执行的命令放到一个脚本中。 在打开的文件中粘贴如下内容 然后 ^X 保存退出。接下来我们要赋予脚本以可执行权限 这样子我们的 dump 脚本就准备好啦! 其中的两句 sed 命令是用来删除掉 nvram 中一些不应该被保存的数据的。 这个脚本将会把 nvram 的变量内容以 xml 格式保存到 /nvram.plist 下。 输入命令 在其中粘贴如下内容 然后同样地,^X 保存并退出。 试试看把亮度调到一格,然后重启看看效果吧! 请再次检查是否安装了 EmuVariableUefi-64.efi 如果确定已经安装,请前往 原帖 ,参照原帖的 Step 2 配置读取 /nvram.plist 的脚本。2023-06-12 00:27:301
oracle11g部署搭建
1.配置hostname [root@oracledb ~]#hostnamectl set-hostname oracledb [root@oracledb ~]#echo " 10.100.1.10 oracledb" >>/etc/hosts 2.关闭selinux和防火墙 [root@oracledb ~]#sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config [root@oracledb ~]#setenforce 0 [root@oracledb ~]#systemctl stop firewalld [root@oracledb ~]#systemctl disable firewalld [root@oracledb ~]#systemctl status firewalld 3.下载Oracle软件包 且上传到服务器上,进行解压缩 建议使用winSCP工具进行上传到服务器的/opt目录下 [root@oracledb ~]# ls -lh /opt/ -rw-r--r-- 1 root root 1.2G Mar 30 16:12 linux.x64_11gR2_database_1of2.zip -rw-r--r-- 1 root root 1.1G Mar 30 16:11 linux.x64_11gR2_database_2of2.zip 4.安装oracle环境所需要的依赖包-配置YUM源 安装依赖包之前,一定要设置好服务器上的安装源,原因是:可以在没有互联网的时候安装服务所需依赖包;常用的安装源有两种方式: (1) 配置本地yum源 新建配置文件vi /etc/yum.repos.d/localsource.repo输入如下内容: [localsource] name=localsource baseurl=file:///media/cdrom enabled=1 gpgcheck=0 (2) 生成本地yum 缓存 注意:从Oracle 11g 11.2.0.2版本开始,在Linux x86_64上安装时,只需要安装64位的软件包,但是,对于11.2.0.2之前的任何Oracle database 11g,下表中列出的32位和64位的安装包都必须安装 5.安装oracle环境所需要的依赖包-安装依赖包 (1)安装依赖包 [root@oracledb ~]# yum -y install binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel zlib zlib-devel pcre-devel unzip (2)安装完成后,检查依赖是否全部安装成功 [root@oracledb ~]# rpm -q binutils compat-libcap1 compat-libstdc++-33 gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat unixODBC unixODBC-devel zlib zlib-devel pcre-devel unzip | grep "not installed" (3)创建所需的用户组和用户 如果要安装Oracle数据库,通常需要以下本地操作系统用户组和用户: Oracle inventory组(通常为 oinstall) OSDBA组 (通常为 dba) OSOPER组 (通常为 oper) Oracle软件所有者(通常为 oracle) 创建用户组和用户: [root@oracledb ~]# groupadd oinstall [root@oracledb ~]# groupadd dba [root@oracledb ~]# groupadd oper [root@oracledb ~]# useradd -g oinstall -G dba oracle (4)修改oracle用户密码:建议密码配置为字符+数字+特殊字符 [root@oracledb ~]# passwd oracle 6.配置内核参数和资源限制 (1)编辑配置文件vi /etc/sysctl.conf添加如下参数: vm.max_map_count = 655360 fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 2147483648 ###最小值: 536870912 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576 注意:如果系统中某个参数高于上面的参数的值 ,保留较大的值,上面的数值只是官方要求的最小值,可以根据系统调整数值,以优化系统性能 (2)使内核参数生效 [root@oracledb ~]# sysctl -p 7.创建oracle安装目录 如下目录,根据自己的实际情况可做修改: [root@oracledb ~]# mkdir -p /data/app/oracle/product/11.2.0 [root@oracledb ~]# cd /data/app/oracle/ [root@oracledb oracle]# mkdir oradata inventory fast_recovery_area [root@oracledb ~]# chown -R oracle:oinstall /data/app/oracle [root@oracledb ~]# chmod -R 775 /data/app/oracle 8.配置oracle用户环境变量 编辑配置文件vi /home/oracle/.bash_profile添加如下内容: export ORACLE_BASE=/data/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0 export ORACLE_SID=orcl export PATH=$PATH:$ORACLE_HOME/bin 9. 解压下载好的两个Oracle数据库文件 [root@oracledb ~]# cd /opt [root@oracledb ~]# unzip linux.x64_11gR2_database_1of2.zip -d /data [root@oracledb ~]# unzip linux.x64_11gR2_database_2of2.zip -d /data 10. 编辑静默安装响应文件 (1)切换到oracle用户执行 [root@oracledb ~]# su - oracle (2)切换到响应文件的目录下 [oracle@oracledb ~]$ cp -R /data/database/response/ . [oracle@oracledb ~]$ cd response/ [oracle@oracledb response]$ ls dbca.rsp db_install.rsp netca.rsp 11.修改配置文件:vi /home/oracle/response/db_install.rsp,修改以下变量的值 oracle.install.option=INSTALL_DB_SWONLY UNIX_GROUP_NAME=oinstall INVENTORY_LOCATION=/data/app/oracle/inventory SELECTED_LANGUAGES=en,zh_CN ORACLE_HOME=/data/app/oracle/product/11.2.0 ORACLE_BASE=/data/app/oracle oracle.install.db.InstallEdition=EE oracle.install.db.DBA_GROUP=dba oracle.install.db.OPER_GROUP=dba DECLINE_SECURITY_UPDATES=true 12. 开始静默安装Oracle 11g (1)开始安装oracle数据库 [oracle@oracledb ~]$ cd /data/database [oracle@oracledb ~]$ ./runInstaller -silent -responseFile /home/oracle/response/db_install.rsp -ignorePrereq 注意:安装期间可以使用tail命令查看oracle的安装日志,且日志文件名称是根 据自己的实际执行时间确定的,安装日志文件会在安装时提示,需要等待3分钟左右,注意不要停止运行;安装完成后有如下提示,如果有类似如下提示,说明安装完成。 The following configuration scripts need to be executed as the "root" user. #!/bin/sh #Root scripts to run /data/app/oraInventory/orainstRoot.sh /data/app/oracle/product/11.2.0/db_1/root.sh To execute the configuration scripts: 1. Open a terminal window 2. Log in as "root" 3. Run the scripts 4. Return to this window and hit "Enter" key to continue Successfully Setup Software. 13.使用 root用户执行脚本 (1)切换到root用户执行 [root@oracledb ~]# su - root (2)执行两个用户脚本 [root@oracledb ~]# sh /data/app/oracle/inventory/orainstRoot.sh [root@oracledb ~]# sh /data/app/oracle/product/11.2.0/root.sh 14.配置监听程序 (1)切换到oracle用户执行(建议退出重进oracle用户) [root@oracledb ~]# su - oracle (2)配置监听,查看输出结果 [oracle@oracledb ~]$ netca /silent /responsefile /home/oracle/response/netca.rsp (3)查看监听服务状态,若没启动需要启动 [oracle@oracledb ~]$ lsnrctl status [oracle@oracledb ~]$ lsnrctl start 查看结果: Parsing command line arguments: Parameter "silent" = true Parameter "responsefile" = /data/etc/netca.rsp Done parsing command line arguments. Oracle Net Services Configuration: Profile configuration complete. Oracle Net Listener Startup: Running Listener Control: /data/app/oracle/product/11.2.0/bin/lsnrctl start LISTENER Listener Control complete. Listener started successfully. Listener configuration complete. Oracle Net Services configuration successful. The exit code is 0 (4)查看监听端口 [oracle@oracledb ~]$ netstat -tnpl | grep 1521 15.静默创建数据库 GDBNAME = "orcl" SID = "orcl" SYSPASSWORD = "oracle" SYSTEMPASSWORD = "oracle" SYSMANPASSWORD = "oracle" DBSNMPPASSWORD = "oracle" DATAFILEDESTINATION =/data/app/oracle/oradata RECOVERYAREADESTINATION=/data/app/oracle/fast_recovery_area CHARACTERSET = "ZHS16GBK" TOTALMEMORY = " 6552 " ##其中TOTALMEMORY = " 6552 " 为6552 MB,物理内存8G*80% (2)切换到oracle用户执行 [root@oracledb ~]# su - oracle (3)执行静默建库 [oracle@oracledb ~]$ dbca -silent -responseFile /home/oracle/response/dbca.rsp 执行过程如下: Copying database files 1% complete 3% complete 11% complete 18% complete 26% complete 37% complete Creating and starting Oracle instance 40% complete 45% complete 50% complete 55% complete 56% complete 60% complete 62% complete Completing Database Creation 66% complete 70% complete 73% complete 85% complete 96% complete 100% complete Look at the log file "/data/app/oracle/cfgtoollogs/dbca/orcl/orcl.log" for further details. (4)查看进程 [oracle@oracledb ~]$ ps -ef | grep ora_ | grep -v grep (5)再次查看监听状态进行确认 [oracle@oracledb ~]$ lsnrctl status 结果显示: The command completed successfully 16.至此数据库就安装成功了,下面我们登录下数据库 (1)切换到oracle用户执行 [root@oracledb ~]# su - oracle (2)登录数据库 [oracle@oracledb ~]$ sqlplus / as sysdba (3)查询实例状态 SQL>select status from v$instance; (4)查看数据库版本 SQL> select * from v$version; (5)激活scott用户 SQL>alter user scott account unlock; SQL>alter user scott identified by tiger; SQL>select username,account_status from dba_users; 17.设置Oracle开机启动 (1)修改配置文件vi /data/app/oracle/product/11.2.0/bin/dbstart 修改如下内容: 将脚本中的ORACLE_HOME_LISTNER=$1,修改为ORACLE_HOME_LISTNER=$ORACLE_HOME (2)修改配置文件vi /data/app/oracle/product/11.2.0/bin/dbshut 修改如下内容: 将脚本中的ORACLE_HOME_LISTNER=$1,修改为ORACLE_HOME_LISTNER=$ORACLE_HOME (3)修改配置文件 vi /etc/oratab修改如下内容, orcl:/data/app/oracle/product/11.2.0:Y (4)新建文件:vi /etc/rc.d/init.d/oracle 注意:建议全部复制脚本内容 #! /bin/bash # oracle: Start/Stop Oracle Database 11g R2 # chkconfig: 345 90 10 # description: The Oracle Database is an Object-Relational Database Management System. # processname: oracle . /etc/rc.d/init.d/functions LOCKFILE=/var/lock/subsys/oracle ORACLE_HOME=/data/app/oracle/product/11.2.0 ORACLE_USER=oracle case "$1" in start) if [ -f $LOCKFILE ]; then echo $0 already running. exit 1 fi echo -n #34;Starting Oracle Database:" su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start" su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME" su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl start dbconsole" touch $LOCKFILE ;; stop) if [ ! -f $LOCKFILE ]; then echo $0 already stopping. exit 1 fi echo -n #34;Stopping Oracle Database:" su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop" su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut" su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole" rm -f $LOCKFILE ;; restart) $0 stop $0 start ;; status) if [ -f $LOCKFILE ]; then echo $0 started. else echo $0 stopped. fi ;; *) echo "Usage: $0 [start|stop|status]" exit 1 esac exit 0 (5)给 /etc/init.d/oracle添加执行权限 [root@oracledb ~]# chmod +x /etc/init.d/oracle (6)开机启动oracle [root@oracledb ~]# chkconfig oracle on (7)给启动文件加权限 [root@oracledb ~]# cd /data/app/oracle/product/11.2.0/bin/ [root@oracledb bin]# chmod 6751 oracle [root@oracledb bin]# cd /var/tmp [root@oracledb tmp]# chown -R oracle:oinstall .oracle (8)重启测试 [root@oracledb ~]# reboot (9)切换到oracle用户登录状态下 [root@oracledb ~]# su - oracle [oracle@oracledb ~]$ sqlplus / as sysdba (10)解除锁定 SQL> alter user SYSTEM account unlock; (11)这时候就可以用Navicat连接了 SQL> conn; 用户名:SYSTEM 密码:oracle 如果不能正确连接,改下密码试试 alter user system identified by 新密码 [root@oracledb ~]# mkdir -p /data/szzt [root@oracledb ~]# cd /data/ [root@oracledb data]# chown oracle:oinstall -R szzt [root@oracledb data]# ll total 0 drwxr-xr-x 3 root root 20 Apr 8 21:14 app drwxr-xr-x 8 root root 128 Aug 21 2009 database drwxr-xr-x 2 oracle oinstall 6 Apr 14 16:17 szzt [root@oracledb ~]# su - oracle [oracle@oracledb ~]$ sqlplus / as sysdba SQL> conn cshi Enter password: 登录失败 Connected. SQL> create temporary tablespace DB_DATA_TMP tempfile"/data/szzt/DB_DATA_TMP.dbf" size 500m autoextend on next 100m maxsize 10240m extent management local; 显示结果: Tablespace created. SQL> create tablespace DB_DATA logging datafile"/data/szzt/DB_DATA.dbf" size 2048m autoextend on next 100m maxsize 10240m extent management local; 显示结果: Tablespace created. SQL> create user ceshi identified by ceshi default tablespace DB_DATA temporary tablespace DB_DATA_TMP; 显示结果: User created. SQL> grant dba to ceshi; 显示结果: Grant succeeded. SQL> conn ceshi ###用户名和密码一样,此时登录成功 [oracle@oracledb ~]$ cd /data/app/oracle/product/11.2.0/bin/ 注意:数据库导出操作是在 源服务器 上进行 [oracle@oracledb bin]$ exp 用户名/密码@ IP地址 /orcl file =/data/szzt/ceshi.dmp owner="用户名" Exp2023-06-12 00:27:371
linux中fork,source和exec的区别
shell的命令可以分为内部命令和外部命令. 内部命令是由特殊的文件格式.def实现的,如cd,ls等.而外部命令是通过系统调用或独立程序实现的,如awk,sed. source和exec都是内部命令.fork 使用 fork 方式运行 script 时, 就是让 shell(parent process) 产生一个 child process 去执行该 script, 当 child process 结束后, 会返回 parent process,但 parent process 的环境是不会因 child process 的改变而改变的.source 使用 source 方式运行 script 时, 就是让 script 在当前 process 内执行, 而不是产生一个 child process 来执行. 由于所有执行结果均于当前 process 内完成,若 script 的环境有所改变, 当然也会改变当前 process 环境了.source ./my.sh 或 . ./my.shexec 使用 exec 方式运行script时, 它和 source 一样, 也是让 script 在当前process内执行, 但是 process 内的原代码剩下部分将被终止. 同样, process 内的环境随script 改变而改变.结论:通常如果我们执行时,都是默认为fork的。大家可以通过pstree命令看看关于父子进程的关系。如上,如果想让父进程得到子进程的环境变量,就是source方式了 fork ( /directory/script.sh) fork是最普通的, 就是直接在脚本里面用/directory/script.sh来调用script.sh这个脚本.运行的时候开一个sub-shell执行调用的脚本,sub-shell执行的时候, parent-shell还在。sub-shell执行完毕后返回parent-shell. sub-shell从parent-shell继承环境变量.但是sub-shell中的环境变量不会带回parent-shellsource (source /directory/script.sh) 与fork的区别是不新开一个sub-shell来执行被调用的脚本,而是在同一个shell中执行. 所以被调用的脚本中声明的变量和环境变量, 都可以在主脚本中得到和使用. exec (exec /directory/script.sh) exec与fork不同,不需要新开一个sub-shell来执行被调用的脚本. 被调用的脚本与父脚本在同一个shell内执行。但是使用exec调用一个新脚本以后, 父脚本中exec行之后的内容就不会再执行了。这是exec和source的区别1.sh 代码: #!/bin/bash A=B echo "PID for 1.sh before exec/source/fork: $$" export A echo "1.sh: $A is $A" case $1 in exec) echo "using exec..." exec ./2.sh ;; source) echo "using source..." . ./2.sh ;; *) echo "using fork by default..." ./2.sh ;; esac echo "PID for 1.sh after exec/source/fork: $$" echo "1.sh: $A is $A" 2.sh 代码: #!/bin/bash echo "PID for 2.sh: $$" echo "2.sh get $A=$A from 1.sh" A=C export A echo "2.sh: $A is $A" 然后,分别跑如下参数来观察结果: $ ./1.sh fork $ ./1.sh source $ ./1.sh exec2023-06-12 00:27:452
Perl中以my开头的语句,my是什么作用?
my是关键字,表示定义局部变量,你试试取消my看,如果在严格语法下会出错,否则my的语句都可以取消。2023-06-12 00:28:103
shell编程怎么抽取匹配正则表达式的字符串?
a=$( expr "helloworld20140501.txt" : ".*([0-9]{8}).*" )echo $alinux shell 中可以将命令的结果赋值给变量,$(命令)这种格式将返回命令执行后的结果字符串上面命令执行后,变量a的值是20140501 a=`echo "helloworld20140501.txt"|sed "s/.*([0-9]{8}).*/1/"`这个命令作用也是一样,变量a被赋值为201405012023-06-12 00:28:471