GNU sed

如何重命名一堆文件的扩展名?

冷暖自知 提交于 2020-02-26 02:36:33
在一个目录中,我有一堆 *.html 文件。 我想将它们全部重命名为 *.txt 我怎样才能做到这一点? 我使用bash shell。 #1楼 你想使用 rename : rename -S .html .txt *.html 这完全符合您的要求 - 它会将扩展名从 .html 更改为 .txt 以匹配 *.html 所有文件。 注意:Greg Hewgill正确地指出这不是一个bash内置; 并且是一个单独的Linux命令。 如果你只需要Linux上的东西,这应该工作正常; 如果您需要更多跨平台的东西,那么请看一下其他答案。 #2楼 不幸的是,做便携并不是微不足道的。 你可能需要一些expr魔法。 for file in *.html; do echo mv -- "$file" "$(expr "$file" : '\(.*\)\.html').txt"; done 一旦你开心它就能做你想做的事情,就去除回声。 编辑: 对于这种特殊情况, basename 可能更具可读性,尽管 expr 通常更灵活。 #3楼 rename 's/\.html$/\.txt/' *.html 完全符合你的要求。 #4楼 要获得更好的解决方案(仅使用bash功能,而不是外部调用),请参阅 其他答案之一 。 以下内容可以并且不需要系统具有 rename 程序(尽管您通常在系统上具有此功能): for

re.search和re.match有什么区别?

荒凉一梦 提交于 2020-02-25 18:32:11
Python re 模块中 的 search() 和 match() 函数有什么区别? 我已经阅读了 文档 ( 当前文档 ),但是我似乎从未记得它。 我一直在查找并重新学习它。 我希望有人会用示例清楚地回答它,以便(也许)它会贴在我的头上。 或者至少我将有一个更好的地方来回答我的问题,并且重新学习它的时间会更少。 #1楼 re.match 锚定在字符串的开头。 这与换行符无关,因此与在模式中使用 ^ 并不相同。 如 重新匹配文档所述 : 如果 字符串开头的 零个或多个字符与正则表达式模式匹配,则返回相应的 MatchObject 实例。 如果字符串与模式不匹配,则返回 None 否则返回 None 。 请注意,这与零长度匹配不同。 注意:如果要在字符串中的任何位置找到匹配项,请改用 search() 。 re.search 搜索整个字符串,如 文档所述 : 扫描字符串以 查找正则表达式模式产生匹配的位置,然后返回相应的 MatchObject 实例。 如果字符串中没有位置与模式匹配,则返回 None 否则返回 None 请注意,这与在字符串中的某个点找到零长度匹配不同。 因此,如果您需要匹配字符串的开头,或者匹配整个字符串,请使用 match 。 它更快。 否则使用 search 。 该文档有一个 特定的部分,用于 match 和 search ,其中还涵盖了多行字符串:

Windows使用nmake编译nginx报错'sed' 不是内部或外部命令,也不是可运行的程序

感情迁移 提交于 2020-01-08 13:45:52
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 这个是因为我们没有正确配置msys 和 mingw32 在windows 上面的路径产生的,不用理会。 来源: oschina 链接: https://my.oschina.net/daxian1110/blog/3154795

linux命令,如何根据关键字查询,如何替换某个关键字,vi中如何复制

 ̄綄美尐妖づ 提交于 2020-01-07 19:12:44
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 如何根据关键字查询 如果是在文件的外面 grep -rl 关键字 目录 例如:查找/home下所有内容含有hello的文件。grep -rl ‘hello’ /home r:递归目录与子目录查找 l:只列出文件全名 如果是在没有打开文件的前提就用"cat 文件名 | grep "关键字"" 如果是用vi打开文件后,在命令行下输入“: /关键字” 按n会跳到下一个 , 按N会跳到上一个 如果要取消的话,则输入 :set nonu 行号的设置是vi的环境设置,不会影响文本的内容。 在用vi打开文件后,怎么替换某个关键字 1. 基本替换 :s/str1/str2/ 替换当前行第一个str1为str2 :s/str1/str2/g 替换当前行所有str1为str2 :n,$s/str1/str2/ 替换第 n 行开始到最后一行中每一行的第一个str1为str2 :n,$s/str1/str2/g 替换第 n 行开始到最后一行中每一行所有str1为str2 (n 为数字,若 n 为 .,表示从当前行开始到最后一行) :%s/str1/str2/(等同于 :g/str1/s//str2/) 替换每一行的第一个str1为str2 :%s/str1/str2/g(等同于 :g/str1/s//str2/g)

MySQL 误删ibdata、ib_logfile恢复案例

一个人想着一个人 提交于 2020-01-07 13:05:43
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 昨天为了测试mysql数据库快速删除大库的方案,一时起意把redo和undo log也一起删除了,由此才有下文 一、前言 InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性。 由于删除了这两个log,数据库又重启了,因此就需要一些其他办法来恢复数据库 二、mysqlfrm工具安装 要恢复数据,我们需要用到mysqlfrm工具, 需要安装MySQL Utilities包,这里可以采用yum等形式来安装,如下: yum install mysql-utilities.noarch 其他安装方式详见: MySQL管理工具MySQL Utilities 安装 三、开始数据恢复 由于影响的数据库比较多,大概40多个库,表大概有2500多个,手动操作很不现实,因此中间需要一些脚本代替体力劳动 3.1 用frm工具批量提取建表语句 mysqlfrm 是一个恢复性质的工具,用来读取.frm文件并从该文件中找到表定义数据生成CREATE语句 for n in `ls -d 10.*`;do mysqlfrm --basedir=/home/mysql/mysql --port=3336 --user=root

SELL脚本工具:linux下监听scp传输文件,传输成功后打印新上传文件名

孤者浪人 提交于 2020-01-07 00:21:51
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> #! /usr/bin/expect #!/bin/bash PROC_NAME="scp" ProcNumber=`ps -ef |grep $PROC_NAME|grep -v grep|wc -l` if [ $ProcNumber -le 0 ];then result=0 else result=1 fi #echo ${result} if [ $result -eq 1 ];then echo "has file in transit.." while true do ProcNumber=`ps -ef |grep $PROC_NAME|grep -v grep|wc -l` if [ $ProcNumber -le 0 ];then echo "download finish!" break else sleep 7 fi done else echo "no file in transit!" fi checkroot="/home/lxh/aa/" cp /dev/null rsync_file if [ ! -f file.md5 ];then find $checkroot -type f -exec md5sum {} \; >>file.md5 else for file in $

使用sed 命令查找和替换文件中的字符串的方法总结

三世轮回 提交于 2020-01-06 16:09:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 当你在使用文本文件时,很可能需要查找和替换文件中的字符串。sed 命令 主要用于替换一个文件中的文本。在 Linux 中这可以通过使用 sed 命令 和 awk 命令来完成。 在本教程中,我们将告诉你使用 sed 命令如何做到这一点,然后讨论讨论 awk 命令相关的。 sed 命令是什么 sed 命令表示 Stream Editor(流编辑器),用来在 Linux 上执行基本的文本操作。它可以执行各种功能,如搜索、查找、修改、插入或删除文件。 此外,它也可以执行复杂的正则表达式匹配。 它可用于以下目的: 查找和替换匹配给定的格式的内容。 在指定行查找和替换匹配给定的格式的内容。 在所有行查找和替换匹配给定的格式的内容。 搜索并同时替换两种不同的模式。 本文列出的十五个例子可以帮助你掌握 sed 命令。 如果要使用 sed 命令删除文件中的行,去下面的文章。 注意:由于这是一篇演示文章,我们使用不带 -i 选项的 sed 命令,该选项会在 Linux 终端中删除行并打印文件内容。 但是,在实际环境中如果你想删除源文件中的行,使用带 -i 选项的 sed 命令。 常见的 sed 替换字符串的语法。 sed -i 's/Search_String/Replacement_String/g' Input_File

如何用awk或sed递归查找/替换字符串?

家住魔仙堡 提交于 2019-12-29 16:55:00
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我如何查找和替换每次出现的情况: subdomainA.example.com 与 subdomainB.example.com 在 /home/www/ 目录树下的每个文本文件中递归? #1楼 cd /home/www && find . -type f -print0 | xargs -0 perl -i.bak -pe 's/subdomainA\.example\.com/subdomainB.example.com/g' #2楼 find /home/www \( -type d -name .git -prune \) -o -type f -print0 | xargs -0 sed -i 's/subdomainA\.example\.com/subdomainB.example.com/g' -print0 告诉 find 打印以空字符而不是换行符分隔的每个结果。 如果您的目录中的文件名中带有换行符,这种情况极有可能发生,这仍然使 xargs 可以使用正确的文件名。 \\( -type d -name .git .prune \\) 是一个表达式,它完全跳过名为 .git 所有目录。 如果使用SVN或要保留其他文件夹,则可以轻松扩展它-只需与更多名称匹配即可。 它大致等效于 -not

删除文本文件中包含特定字符串的行

廉价感情. 提交于 2019-12-29 10:35:29
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我将如何使用sed删除文本文件中包含特定字符串的所有行? #1楼 您可以使用sed替换文件中的行。 但是,这似乎比使用grep取反将其慢进第二个文件,然后将第二个文件移到原始文件上要慢得多。 例如 sed -i '/pattern/d' filename 要么 grep -v "pattern" filename > filename2; mv filename2 filename 无论如何,第一个命令在我的计算机上花费的时间要长3倍。 #2楼 perl -i -nle'/regexp/||print' file1 file2 file3 perl -i.bk -nle'/regexp/||print' file1 file2 file3 第一个命令就地编辑文件(-i)。 第二个命令执行相同的操作,但是通过在文件名中添加.bk来保留原始文件的副本或备份(.bk可以更改为任何内容)。 #3楼 使用GNU sed 的简单方法: sed --in-place '/some string here/d' yourfile #4楼 您还可以使用以下命令: grep -v 'pattern' filename 在这里 -v 将仅打印您的模式以外的其他内容(这意味着反转匹配)。 #5楼 要使用 grep 获得类似结果的结果