提取字符串的问题
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
提取字符串的问题
我现在在写shell脚本要对一些结果进行处理
形如
scsi.vendor = 'hp' (string)
scsi.model = 'DVDROM DH20N' (string)
info.product = 'SCSI Device' (string)
我现在要得到''内的字符串,分别赋值给对应的变量
vendor=hp
model="DVDROM DH20N"
product="SCSI DEVICE"
我使用的是 awk '{print $3}' | sed 's/\x27//g'
得到的model是DVDROM
product是SCSI
没有预期效果
另外还有个问题
使用find 我想找到当前目录下的所有文件类型的相对这个当前目录的相对路径
就是说 使用find 得到每个文件类型的相对路径地址 以便处理
使用find时 也要考虑那些文件含有空格字符的情况 这个有些麻烦
使用find ./ -print0和xargs -0来处理
但是得到的是 一个目录 和该目录下文件的列表
形如
scsi.vendor = 'hp' (string)
scsi.model = 'DVDROM DH20N' (string)
info.product = 'SCSI Device' (string)
我现在要得到''内的字符串,分别赋值给对应的变量
vendor=hp
model="DVDROM DH20N"
product="SCSI DEVICE"
我使用的是 awk '{print $3}' | sed 's/\x27//g'
得到的model是DVDROM
product是SCSI
没有预期效果
另外还有个问题
使用find 我想找到当前目录下的所有文件类型的相对这个当前目录的相对路径
就是说 使用find 得到每个文件类型的相对路径地址 以便处理
使用find时 也要考虑那些文件含有空格字符的情况 这个有些麻烦
使用find ./ -print0和xargs -0来处理
但是得到的是 一个目录 和该目录下文件的列表
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 提取字符串的问题
第一个问题就不要 awk 和 sed 并用了,用其中之一就行了。
我假定源文件中每个等号前后都恰好有一个空格,如果不是这种情况,只需把等号前后的空格改改就行了,例如换成“ *”
第二个问题没太看懂要求。
代码: 全选
sed "s/\([^ ]*\) = '\([^']*])'.*/\1=\2/"
第二个问题没太看懂要求。
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: 提取字符串的问题
第二个问题就是
给我一个目录
进入该目录
我就得到 该目录下的所有文件 (包括 -f -d -b -c -S -p -h)
./xxx/yyyy
./xxxxx/yyyyy
./xxxxxxx/yyyy\ cccc
或者格式大致相似 可以提取相对路径
楼上的大哥,你那个sed好像不太行
[root@dt3 ~]# echo "a = 'b c' (c)" | sed "s/\([^ ]*\) = '\([^']*])'.*/\1=\2/"
sed: -e expression #1, char 34: Unmatched ( or \(
bash: echo: write error: Broken pipe
[root@dt3 ~]#
给我一个目录
进入该目录
我就得到 该目录下的所有文件 (包括 -f -d -b -c -S -p -h)
./xxx/yyyy
./xxxxx/yyyyy
./xxxxxxx/yyyy\ cccc
或者格式大致相似 可以提取相对路径
楼上的大哥,你那个sed好像不太行
[root@dt3 ~]# echo "a = 'b c' (c)" | sed "s/\([^ ]*\) = '\([^']*])'.*/\1=\2/"
sed: -e expression #1, char 34: Unmatched ( or \(
bash: echo: write error: Broken pipe
[root@dt3 ~]#
-
- 帖子: 398
- 注册时间: 2009-06-28 10:06
- 系统: ubuntu12.04
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: 提取字符串的问题
scsi.vendor = 'hp' (string)
scsi.model = 'DVDROM DH20N' (string)
info.product = 'SCSI Device' (string)
=作为分割符,$2就是'hp' (string),和 'SCSI Device' (string) 的
scsi.model = 'DVDROM DH20N' (string)
info.product = 'SCSI Device' (string)
=作为分割符,$2就是'hp' (string),和 'SCSI Device' (string) 的
- eexpress
- 帖子: 58428
- 注册时间: 2005-08-14 21:55
- 来自: 长沙
-
- 帖子: 398
- 注册时间: 2009-06-28 10:06
- 系统: ubuntu12.04
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
Re: 提取字符串的问题
sed -r 's/.*\.(\S+).*\x27(.*)\x27.*/\1="\2"/' file
eval "$(sed -r 's/.*\.(\S+).*\x27(.*)\x27.*/\1="\2"/' file)"
eval "$(sed -r 's/.*\.(\S+).*\x27(.*)\x27.*/\1="\2"/' file)"
bash不如perl精妙,学不到lisp的皮毛,远不够c++强悍,不过可以用。
-
- 帖子: 919
- 注册时间: 2009-07-01 22:04
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 提取字符串的问题
第二 ) 前是反斜杠,打字时手指偏了,没注意。chengmoYS 写了: 楼上的大哥,你那个sed好像不太行
[root@dt3 ~]# echo "a = 'b c' (c)" | sed "s/\([^ ]*\) = '\([^']*])'.*/\1=\2/"
sed: -e expression #1, char 34: Unmatched ( or \(
bash: echo: write error: Broken pipe
[root@dt3 ~]#
代码: 全选
echo "a = 'b c' (c)" | sed "s/\([^ ]*\) = '\([^']*\)'.*/\1=\2/"
-
- 帖子: 1453
- 注册时间: 2008-05-24 8:30
Re: 提取字符串的问题
用 awk 的例子
代码: 全选
echo "a = 'b c' (c)" | awk -F "( = |')" '{print $1=$3}'
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: 提取字符串的问题
要递归目录fnan 写了:第二个问题其实是不搜索当前目录下的目录的文件吧,如果这样加上-maxdepth 1即可。
后来干脆就用
find ./ -type f等
把所有支持的7个文件类型都搜出来 就是要的结果
本来是想图简便的
-
- 帖子: 125
- 注册时间: 2007-10-22 22:40
Re: 提取字符串的问题
谢谢 fnan 和 aerofox 的热心解答 又学到了
看来得多看多实践呀
看来得多看多实践呀