① 如何用shell提取文件中指定的字符串
shell读取文件的指定行字符串
在得到数行输出时,需要得到指定行的字段,可以使用该指令。
sed -n Np 文件名
如sed -n 2p xxx 输出结果即为第二行的内容
在shell脚本中有时需要按行读出文件的内容,比如文件中每一行的命令等。
假设存在文件filename,需要从中按行读取内容,并在每行的开头增加字符串command,命令如下
cat filename | while read line; do echo "command $line"; done!
② 利用shell脚本如何提取一个文件中某一特定行和下面若干行的内容
1、在linux目录/root下建立一个txt文件,内容如下,使用|竖线分割,作为我们的实验数据样本。
③ 怎么用批处理脚本查找文本中特定的字符
@echo off
for /f "delims=" %%a in (test.txt) do (
echo "%%a"|find "num_a" &&echo %%a >>newtest.txt
)
echo end...
pause
④ shell脚本 中如何截取文件名中的指定字符串
linux85:~ # date=`echo "abcd(111222333)" | awk -F "(" '{print $2}'`
linux85:~ # echo $date
111222333)
linux85:~ # echo $date|awk '{print substr($0,1,9)}'
111222333
⑤ 用批处理脚本如何提取多个txt文本中含指定字符串/关键词的行,并写入一个新的Excel文件中
BAT与源文件放在一起执行。
导出TXT,自行用EXCEL打开另存。
导出的TXT与源文件不要放在同一目录。
@echooff
(for/f"delims="%%ain('dir/a-d/s/b*.txt')dofor/f"delims="%%bin('type"%%a"^|find/i"error"')doecho;%%~na%%b)>"D:out.TXT"
⑥ windows脚本 查找文件中的字符串 ,如果有指定的字符串就执行某个命令
这根本不需要for命令啊,直接find或findstr命令就可以了。下面我用find命令写一个
find"(0roweffected)"a.txt&&b.bat
⑦ lua脚本怎么取出自己想要的的部分字符
你好,以前没接触过lua,刚自己试了一下,就按照你问题中的"23^Hello^你好^2000^world.txt"这个字符串为例,以^为分隔符来说吧:
---------------start---------------
str = "23^Hello^你好^2000^world.txt"
list = table.pack()
for w in string.gmatch(str, "[^^]+") do
print(w)
table.insert(list, w)
end
---------------start---------------
解释:代码共6行,
第1行:定义一个变量str,内容为"23^Hello^你好^2000^world.txt",这也是我们要处理的字符串.
第二行: 定义一个空列表,它是用在下面的for循环中,存放以"^"作为分隔符的每一部分
第三行:简单来看是个for循环,深入一点来看,也就是string.gmatch(str,"[^^]+")这部分需要解释一下,它表示调用的是string库的gmatch()函数,这个函数有两个参数,第1个参数为要处理的字符串,咱们这里就是上面定义的str,第二个参数就是我们要在这个字符串中匹配什么样的内容,这里的匹配内容写的是"[^^]+",学过正则的很好理解,单纯的[abc]表示匹配任意单个字符a或b或c,有一点特殊的是一旦[]中的字符是以^打头的,则表示匹配任意非[]中列出的字符,如[^abc]表示匹配任意除abc外的其它任一字符,所以[^^]解释为匹配除^外的任一字符,举例来说,如果我们有字符串"23^Hello",如果用[^^]匹配的话,最终得到的是7个单个字符,即"2","3","H","e","l","l","o",显示这不符合我们的题意,所以在这基础上改进了一下,即在其后又加了个+号,[^^]+,这里的+号表示尽可能多地匹配它前面内容,这里也就是尽可能多地匹配[^^],所以[^^]+在处理"23^Hello"的时候,结果得到的就是"23","Hello".这里关于用到的这个正则说的不是太清楚,多练练就明白了。最后,第3行把函数部分给替换掉后,可以理解为:for w in [23,Hello,你好,2000,world.txt],每次从[]中取一个值赋给w,然后执行for下面的语句,接着往下看
第4行,接第3行尾,就是把每次赋给w的值都打印出来
第5行,将每次赋给w的值都追加到列表list中
第6行,for循环语法上的闭合关键字,这个没啥说的
到此,我们得到了一个列表值为[23,Hello,你好,2000,world.txt]的list,此时我们就可以使用list[n]来取我们想要的值了 。
*.如果你要问上面最3条最后不都有[23,Hello,你好,2000,world.txt]了嘛,为啥还要那么麻烦,直接使用string.gmatch()函数不就行了嘛,其实第3条结尾我那么写只是为了让你好理解,实际上gmatch()函数的返回值并不是列表,而是一个可迭代的函数,而for循环的作用就是把gmatch()函数返回的这个可迭代的函数中的每个元素都取出来并赋给列表list
*.说的有点啰嗦了,希望对你有帮助吧,另外,我从没用过lua,也是刚查了查,自己实践了一下,希望不会形成误导
⑧ linux shell怎么查找文件中指定字符串,并把该字符串和下一行的内容写到另一个文件中
有两种写入方式:
1、grep
-i
"aaa"
-A
1
1.txt
|
grep
-v
-e
"--"
>2.txt
grep 指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样式,预设grep指令会把含有范本样式的那一列显示出来。若不指定任何文件名称,或是所给予的文件名为“-”,则grep指令会从标准输入设备读取数据。
2、awk
'/aaa/{getline
var;print
$1"\n"
var}'
1.txt
>2.txt
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本操作。完整的awk脚本通常用来格式化文本文件中的信息。
linuxshell中引号的使用方法:
shell使用引号(单引号/双引号)和反斜线("\")用于向shell解释器屏蔽一些特殊字符,反引号(")对shell则有特殊意义。
如:abc="how
are
you"
(bash/pdksh)
set
abc
=
"how
are
you"
(tcsh)
这个命令行把三个单词组成的字符串how
are
you作为一个整体赋值给变量abc.
abc1='@LOGNAME,how
are
you!'
(bash/pdksh)
set
abc1='$LOGNAME,how
are
you!'
(tcsh)
abc2="$LOGNAME,how
are
you!"
(bash/pdksh)
set
abc2="$LOGNAME,how
are
you!"
(tcsh)。
⑨ Linux shell 中如何从路径名提取指定字符串
以
-
为分隔符,用cut命令取第二个字段就行了啊(只要路径名里不含
-
即可)
echo
"/home/lxy/hhhhh-a.bbb.cc.d"
|
cut
-d'-'
-f2
更保险一点的做法是先取出文件名(防止路径名里含
-
),然后再用上述方法处理:
echo
"/home/lxy/hhhhh-a.bbb.cc.d"
|
awk
-F/
'{print
$NF}'
|
cut
-d'-'
-f2
⑩ 怎么用bat截取指定字符串中间的字符串
1 如果是取最左的特定字符(串)之后的部分可用
set "MyVarB=%MyVarA:*.=%"
意思是变量MyVarA第一个.及之前部分替换为空
则MyVarB取得last.stand
当然继续以此方法总是可以取到最后部分
:get
if not "%MyVarB:.=%"=="%MyVarB%" set MyVarB=%MyVarB:*.=%&goto :get
2 对于取最后一个点后的部分,可以把它想象成一个带后缀的文件名
for %%i in ("%MyVarA%") do set "Vq=%%~xi"
set "MyVarB=%Vq:.=%"
注: set 命令后的引号不是必要的%%~xi 表示取后缀名 for命令中的双%%符如在命令行需改为单%
因后缀名是带.的,再把点替换为空(或去掉第一字符set "MyVarB=%Vq:~1%")
3 for命令是循环命令语法比较复杂比如还可以:
for %%i in ("%MyVarA:.=","%") do set "MyVarB=%%~i"
将原串每个.换成"," 且首尾都加上引号,这样形成 "the","last","stand"的字符串
会以逗号为分隔符,循环执行do后的赋值命令,虽然执行了3次但最后一次是最终的赋值情况
还可有其它方法,建议先把如set这样的简单命令熟悉了再去研究for这样的复杂命令