LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 991|回复: 5

怎样获取用换行分开的字符串组

[复制链接]
发表于 2007-7-16 18:28:02 | 显示全部楼层 |阅读模式
用match=`ls | grep "$pattern"`得到的字符串是用换行分离的

然后想得到其中的每一项,有什么方法


  1. copy=$match
  2. file=${copy%% *}
  3. file=`basename "$file"`
  4. match=${match#* }
  5. echo "file = $file"
  6. echo "match = $match"
复制代码


用这个好象只能处理空格分离的,换行应该怎么表示呢,貌似\n不行
发表于 2007-7-16 20:36:43 | 显示全部楼层
可以用sed,我不知道你是要分离什么东西,如果是输出为一段字符,要选择其中一行,那就用sed模式匹配那一行,具体模式看你的需求
回复 支持 反对

使用道具 举报

发表于 2007-7-16 21:25:14 | 显示全部楼层
不明白楼主什么意思,因为其实
  1. $ match=`ls | grep "$pattern"`
复制代码
得到的 $match 是用空格分隔的而不是换行,因为换行符默认作为 $IFS 中的一个被认作内部域分割符,用以分隔word,shell在把这些word再用空格作为分隔连接起来。

所以,想要这里的 $match 保持 ls | grep "$pattern" 输出原样,必须先
  1. $ IFS=''
复制代码

之后,如果要取得一个变量中的每一行,只要echo这个变量并且传递进管道给read。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-16 23:00:13 | 显示全部楼层
我的目的就是在一个目录下搜索匹配的文件,并且得到他们每一个的文件名

我实现的方法比较麻烦,所以请教大家怎么得到每一行

因为
  1. $match=`ls | grep "$pattern"`
复制代码
得到的确实是行分隔的
回复 支持 反对

使用道具 举报

发表于 2007-7-16 23:18:59 | 显示全部楼层
如果你是要处理得到的文件名的话,可以用
ls | grep "$pattern"|while read a
do
....
done

a自然就把一行读进来了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-7-16 23:50:49 | 显示全部楼层
Post by lastart
如果你是要处理得到的文件名的话,可以用
ls | grep "$pattern"|while read a
do
....
done

a自然就把一行读进来了.


赞这位兄弟,你的确实好

我昨天才接触shell,感觉编程时候思路放不开,以后请多指教
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表