首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Unix中提取子字符串

在Unix中提取子字符串
EN

Stack Overflow用户
提问于 2012-03-05 20:00:09
回答 3查看 169关注 0票数 0

我在Windows 7上使用cygwin,我想遍历一个包含大约10,000个文件的文件夹,并对每个文件执行信号处理工具的操作。问题是文件名有一些与操作不兼容的多余字符。因此,我只需要提取文件名的某一部分。

例如,如果文件名为abc123456_justlike.txt.rna,则需要使用abc123456_justlike.txt。我应该如何编写一个循环来遍历每个文件并对缩短的文件名执行操作?

我尝试了cut - b1-10命令,但这不允许我的工具执行必要的操作。我希望在这个问题上有所帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-05 20:50:42

尝试一些shell脚本,使用${ NAME % TAIL }参数替换:变量名称的内容被展开,但是任何与尾球模式匹配的后缀材料都会被切断。

代码语言:javascript
复制
$ NAME=abc12345.txt.rna
$ echo ${NAME%.rna}  #

# process all files in the directory, taking off their .rna suffix
$ for x in *; do signal_processing_tool ${x%.rna} ; done

如果文件名之间存在差异,则可以用一个案例对它们进行分类:

代码语言:javascript
复制
for x in * ; do
  case $x in 
     *.rna ) 
        # do something with .rna files
        ;;
     *.txt )
        # do something else with .txt files
        ;;
     * )
        # default catch-all-else case
        ;;
  esac
done
票数 2
EN

Stack Overflow用户

发布于 2012-03-05 20:06:48

试试sed

代码语言:javascript
复制
echo a.b.c | sed 's/\.[^.]*$//'

s命令在sed中执行搜索和替换操作,在这种情况下,它用空字符串替换正则表达式\.[^.]*$ (意思是:一个点,后面跟着任意数量的非点)。

如果您还不熟悉正则表达式,那么这是学习正则表达式的好方法。我发现使用正则表达式操作字符串要比使用cut (或它们的等效工具)简单得多。

票数 2
EN

Stack Overflow用户

发布于 2012-03-05 20:08:01

如果要从目录中提取文件名列表,请使用以下命令。

代码语言:javascript
复制
ls -ltr | awk -F " " '{print $9}' | cut -c1-10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9573121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档