使用SED删除模式以外的任何内容
我有一大堆。pdf文件名。例如: 901201_HKW_RNT_HW21_136_137_DE_442_Freigabe_DE_CLX.pdf 我试着把所有的东西都去掉,除了这个图案,其中X总是一个数字。 结果应该是: 136_137 到目前为止,我做的正好相反。。通过使用以下各项来匹配模式:使用SED删除模式以外的任何内容,sed,applescript,Sed,Applescript,我有一大堆。pdf文件名。例如: 901201_HKW_RNT_HW21_136_137_DE_442_Freigabe_DE_CLX.pdf 我试着把所有的东西都去掉,除了这个图案,其中X总是一个数字。 结果应该是: 136_137 到目前为止,我做的正好相反。。通过使用以下各项来匹配模式: set NoSpacesString to do shell script "echo " & quoted form of insideName & " |
set NoSpacesString to do shell script "echo " & quoted form of insideName & " | sed 's/([0-9][0-9][0-9]_[0-9][0-9][0-9])//'"
我的目标是将NoSpaceString设置为136_137
请帮我一点忙。
谢谢大家!
另外,如果这很重要,则代码的其余部分在AppleScript中修复
sed
命令…
你可以用
sed-n的/*\([0-9]\{3\}[0-9]\{3\}\)./\1/p'
见
细节
-抑制默认行输出-n
-查找匹配的s/*\([0-9]\{3\}[0-9]\{3\}.*/\1/
模式*\([0-9]\{3\}.
-任何零个或多个字符*
-第1组(RHS中的\([0-9]\{3\}[0-9]\{3\}\)
指的是该组值):三位,\1
,三位\uu
-任何零个或多个字符*
-仅打印替换结果p
sed-En's/*([0-9]{3}{0-9]{3})。*/\1/p'
最终AppleScript代码
set noSpacesString to do shell script“sed-En's/*([0-9]{3}{[0-9]{3})。*/\\1/p'这可能适合您(GNU-sed):
此解决方案将在单独的行上打印所有出现的图案
初始命令取决于以下内容
第二个命令将替换所需的模式,将换行符添加到任意一侧
D
命令最多删除第一行换行符,但由于模式空间不为空,因此会重新启动sed循环(不追加下一行)
现在开始使用初始命令。打印行的前面,然后连同附加的换行符一起删除
再次,sed循环被重新启动,就好像该行从未出现过一样,但减去了第一个所需模式之前的所有字符
这种控制的触发器模式被重复,直到什么都没有留下,然后在后续行上重复,直到文件结束
以下是调试日志的副本,用于包含所需模式的两种表示形式的适当单行输入:
SED PROGRAM:
/\n/ {
P
D
}
s/[0-9]{3}_[0-9]{3}/
&
/
D
INPUT: 'file' line 1
PATTERN: aaa123_456bbb123_456ccc
COMMAND: /\n/ {
COMMAND: }
COMMAND: s/[0-9]{3}_[0-9]{3}/
&
/
MATCHED REGEX REGISTERS
regex[0] = 3-10 '123_456'
PATTERN: aaa\n123_456\nbbb123_456ccc
MATCHED REGEX REGISTERS
regex[0] = 0-3 'aaa'
PATTERN: \n123_456\nbbb123_456ccc
COMMAND: D
PATTERN: 123_456\nbbb123_456ccc
COMMAND: /\n/ {
COMMAND: P
123_456
COMMAND: D
PATTERN: bbb123_456ccc
COMMAND: /\n/ {
COMMAND: }
COMMAND: s/[0-9]{3}_[0-9]{3}/
&
/
MATCHED REGEX REGISTERS
regex[0] = 3-10 '123_456'
PATTERN: bbb\n123_456\nccc
MATCHED REGEX REGISTERS
regex[0] = 0-3 'bbb'
PATTERN: \n123_456\nccc
COMMAND: D
PATTERN: 123_456\nccc
COMMAND: /\n/ {
COMMAND: P
123_456
COMMAND: D
PATTERN: ccc
COMMAND: /\n/ {
COMMAND: }
COMMAND: s/[0-9]{3}_[0-9]{3}/
&
/
PATTERN: ccc
MATCHED REGEX REGISTERS
regex[0] = 0-3 'ccc'
PATTERN:
COMMAND: D
因此,可以使用mv“${file}”“$(sed命令…).pdf重命名pdf“
当引用s
命令的替换部分(即\1
部分)中的组值时,在转换为AppleScript语法时,需要另外转义反斜杠。”。最后一个翻译成AppleScript的ERE示例是:set noSpacesString to do shell script“sed-En的/*([0-9]{3}{0-9]{3})。*/\\1/p'@RobC感谢您提供了在AppleScript环境中实现sed命令的详细信息。
SED PROGRAM:
/\n/ {
P
D
}
s/[0-9]{3}_[0-9]{3}/
&
/
D
INPUT: 'file' line 1
PATTERN: aaa123_456bbb123_456ccc
COMMAND: /\n/ {
COMMAND: }
COMMAND: s/[0-9]{3}_[0-9]{3}/
&
/
MATCHED REGEX REGISTERS
regex[0] = 3-10 '123_456'
PATTERN: aaa\n123_456\nbbb123_456ccc
MATCHED REGEX REGISTERS
regex[0] = 0-3 'aaa'
PATTERN: \n123_456\nbbb123_456ccc
COMMAND: D
PATTERN: 123_456\nbbb123_456ccc
COMMAND: /\n/ {
COMMAND: P
123_456
COMMAND: D
PATTERN: bbb123_456ccc
COMMAND: /\n/ {
COMMAND: }
COMMAND: s/[0-9]{3}_[0-9]{3}/
&
/
MATCHED REGEX REGISTERS
regex[0] = 3-10 '123_456'
PATTERN: bbb\n123_456\nccc
MATCHED REGEX REGISTERS
regex[0] = 0-3 'bbb'
PATTERN: \n123_456\nccc
COMMAND: D
PATTERN: 123_456\nccc
COMMAND: /\n/ {
COMMAND: P
123_456
COMMAND: D
PATTERN: ccc
COMMAND: /\n/ {
COMMAND: }
COMMAND: s/[0-9]{3}_[0-9]{3}/
&
/
PATTERN: ccc
MATCHED REGEX REGISTERS
regex[0] = 0-3 'ccc'
PATTERN:
COMMAND: D