首页 > 系统相关 >shell遍历当前目录下的文件,用去掉文件后缀的字符串替换文件中的文本

shell遍历当前目录下的文件,用去掉文件后缀的字符串替换文件中的文本

时间:2023-06-02 16:06:01浏览次数:54  
标签:文件 遍历 sed 斜线 shell 字符串 添加 替换


今天写了一个shell,遍历当前目录下的文件,用每个文件的文件名去掉后缀的字符串替换文件中的一段字符串。 
脚本如下:



#!/bin/bash
file=`ls *.html`;
echo $file
for item in $file
do
    filename=${item%.*}
    echo $filename
    sed -i "s/search('channel')/search('${filename}')/g" $item
done

总结如下: 

1、得到一个文件的文件名以及后缀的方法: 

得到文件名:${file%.*} 

得到后缀名:${file##*.} 

2、sed的使用:

  • sed基本替换语法:

sed 's/str1/str2/g'

  • , 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,比如:

sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号

  • 命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”:

sed 's?原字符串?替换字符串?' //自定义分隔符为问号

  • 可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个,例如:

sed 's/原字符串/替换字符串/' //替换所有匹配关键字

  • 上箭头”^”表示行首,美元”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行),这里犯二了,搜了半天哪个符号表示首行,半天才想起来,首行就是数字”1″啊.那么在行首和行尾添加字符串就是把行尾和行首替换,例如:



sed 's/^/添加的头部&/g' //在所有行首添加
sed 's/$/&添加的尾部/g' //在所有行末添加
sed '2s/原字符串/替换字符串/g' //替换第2行
sed '$s/原字符串/替换字符串/g' //替换最后一行
sed '2,5s/原字符串/替换字符串/g' //替换2到5行
sed '2,$s/原字符串/替换字符串/g' //替换2到最后一行

  • 替换样式可以多个在同一条命令中执行,用分号”;”分隔,例如:

sed 's/^/添加的头部&/g;s/$/&添加的尾部/g' //同时执行两个替换规则

  • sed处理过的输出是直接输出到屏幕上的,要保存可以将输出重定向,或者使用参数”i”直接在文件中替换:

sed -i 's/原字符串/替换字符串/g' filename //替换文件中的所有匹配项


标签:文件,遍历,sed,斜线,shell,字符串,添加,替换
From: https://blog.51cto.com/u_16131207/6403458

相关文章

  • 好饭不怕晚,扒一下Redis配置文件的底Ku
    忙碌是一种幸福,让我们没时间体会痛苦;奔波是一种快乐,让我们真实地感受生活;疲惫是一种享受,让我们无暇空虚。这几句话就能简单概括我最近的工作和生活。好多小伙伴都来私信“催更”,今天它来了!为了表达阿Q的歉意,特赠送「亿级流量Java高并发与网络编程实战」一本,规则见文末。在往期的文......
  • PHP大文件分片上传/多线程上传
    ​ PHP用超级全局变量数组$_FILES来记录文件上传相关信息的。1.file_uploads=on/off 是否允许通过http方式上传文件2.max_execution_time=30 允许脚本最大执行时间,超过这个时间就会报错3.memory_limit=50M 设置脚本可以分配的最大内存量,防止失控脚本占用过多内存,此......
  • idea - 文件后面显示 0%classes,0% lines covered -解决
    这是因为不小心按了 可以ctrl+Alt+F6 选择"nocoverage "按钮即可......
  • 可执行文件的内存模型,变量的值是放在栈上还是放在堆上
    作者:@古明地盆喜欢这篇文章的话,就点个关注吧,或者关注一下我的公众号也可以,会持续分享高质量Python文章,以及其它相关内容。:点击查看公众号楔子作为开发者,我们一辈子会经历很多工具、框架和语言,但是这些东西无论怎么变,底层逻辑都是不变的。所以今天我们就回头重新思考编程中那些耳......
  • Java+Js实现文件下载
    Maven依赖<dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.9.0</version></dependency>页面<!DOCTYPEhtml><......
  • .NET大文件分片上传/多线程上传
    ​ 一、概述 所谓断点续传,其实只是指下载,也就是要从文件已经下载的地方开始继续下载。在以前版本的HTTP协议是不支持断点的,HTTP/1.1开始就支持了。一般断点下载时才用到Range和Content-Range实体头。HTTP协议本身不支持断点上传,需要自己实现。 二、Range  用于请求头......
  • Jmeter:Beanshell调用java代码的三种方式
    阅读文本大概需要3分钟。0x01:BeanShell控制界面介绍每次调用前重置bsh.Interpreter:可以选择True和False。如果此选项为True,则将为每个取样器重新创建解释器。传递给BeanShell的参数(=>StringParametersandString[]bsh.args):传递给BeanShell脚本的参数,参数存在以下变量中。Param......
  • C# Web大文件分片上传/多线程上传
    ​ 以ASP.NETCoreWebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API,包括文件的上传和下载。 准备文件上传的API #region 文件上传  可以带参数        [HttpPost("upload")]        publicJsonResultuploadProject(I......
  • C#.NET大文件分片上传/多线程上传
    ​IE的自带下载功能中没有断点续传功能,要实现断点续传功能,需要用到HTTP协议中鲜为人知的几个响应头和请求头。 一. 两个必要响应头Accept-Ranges、ETag        客户端每次提交下载请求时,服务端都要添加这两个响应头,以保证客户端和服务端将此下载识别为可以断点续传......
  • python把指定文件夹内所有文件和子文件夹大写全部改为小写
    来源:http://www.shanhubei.com/archives/2622.html接手老项目,里面的文档大小心不同意,而在linux中对大小写又敏感。所以那就统一下把所有文件和文件夹全部转为小写#!/usr/bin/pythonimportsys,ostotal=0defrename(directory):globaltotalifdirectory!=dir......