我需要在bash脚本中使用regex来替换可能位于多行的文件中的文本。
我会将s作为标志传递到我所知道的其他正则表达式引擎中,但我很难使用bash。
据我所知,sed不支持这个特性。
perl显然是这样,但我不能使它在一个班轮perl -i -pe 's/<match.+match>//s $file中工作。
示例案文:
DONT_MATCH
<match some text here
and here
match>
DONT_MATCH
我有一个包含大量信息的文件。文件可能会随时间更新。我的问题是,我有一个文本,它在特定的行中(行号不固定)。唯一的标识符是行的开头:例如:
A=I love you Mary. B=I love you Suzi. C=I love you Jimmy D=I love you Mary and Jimmy.
现在,我只想在唯一标识符是"A“的地方用Maria更改Mary。我不能用行号这样做,因为A可以在任何行中。我不想更改最后一行,它也包含单词Mary。
假设文件包含以下内容: good
good bad
next of baaaad
good 我想使用sed删除包含"bad“的行和这些行中的下一行。在上面的例子中,我想删除第2行和第3行。 我怎么才能做到这一点呢? 我试过了,但不起作用: ebra@him:/tmp$ cat iio | sed -e "s/\n.*bad.*\n.*//"
good
good bad
next of baaaad
good
我试图用sed命令在文件中编辑一个数值。我知道值的确切行和列需要更改。
比方说;
行: 2,列: 21
这就是我要编辑的文件,即example.txt
hello
this is my number = 131;
world
然而,这个数值可能因数字而变化,例如,e,g,30或130。
如果我想把这个号码设为32,
如何找到和替换这个数值?假设我事先不知道数值。
到目前为止,我只能使用sed与已知的关键字和行;
sed -i '' -e '2s/131/32/' example.txt
我需要多次删除包含某个字符串的文件中的所有行,例如,如果我的文件如下所示:
This is a test toRemove first line
This is a test toRemove second line toRemove
应该生成一个类似于只有第一行的文件
This is a test toRemove first line
我正在尝试从命令行在linux上执行此操作,并尝试使用grep或sed,如下所示
grep -d "toRemove.*toRemove" myFile > myOtherFile
sed '/\toRemove.*toRe
我有一个格鲁选项文件,我想通过脚本修改。我想添加额外的引导加载程序选项。
该文件可能会随着时间的推移而改变,因此我希望通过在映像附带的任何引导加载程序选项中添加一些适应未来版本的内容。
例如,引导加载程序文件包含以下内容:
# Set the recordfail timeout
GRUB_RECORDFAIL_TIMEOUT=0
# Do not wait on grub prompt
GRUB_TIMEOUT=0
# Set the default commandline
GRUB_CMDLINE_LINUX_DEFAULT="console=tty1 console=ttyS
我陷入了另一个问题,就是通过shell脚本在两个标记之间读取文本。文件是
**# Enter IP Details, File Name of Machine here.
[SERVER]
TESTTAM
[/SERVER]
[SCRIPTNAME]
hdw.sh
[/SCRIPTNAME]**
还有很多这样的标签。是否有人能了解到如何读取标记、服务器、和/SERVER之间的行并将其存储在文件中。稍后,我将使用其他脚本读取这个输出文件。
我也想对其他标签做同样的事情。
我试图删除文件中特定模式之后出现的所有行。
我有许多文件,它们都有相同的结构:
示例:
file1
line 1
...
line x "here there is a specific pattern"
...
EOF
文件n
line 1
...
line x "here there is a specific pattern"
...
EOF
我试图得到一个简单的解决方案,但是由于我有很多文件,所以我继续了很长的一段路:p
该模式在每个文件中出现一次。
所以,我得到了包含这个模式的所有行号,并保存在一个文件中。
这是我的密码:
count=$(ls -f
我有以下PCRE2正则表达式,用于匹配和删除.webVTT字幕文件中的时间戳行(YouTube的默认值):
^[0-9].:[0-9].:[0-9].+$
这改变了这一点:
00:00:00.126 --> 00:00:10.058
How are you today?
00:00:10.309 --> 00:00:19.272
Not bad, you?
00:00:19.559 --> 00:00:29.365
Been better.
对此:
How are you today?
Not bad, you?
Been better.
我将如何将这个PCRE2正则
从著名的"sed一行“中找到下面的sed脚本来反转每行中的字符,并且我无法在脚本的//D中执行以下命令
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
假设inital文件有两行开头,
apple
banana
在第一个命令之后,
/\n/!G
模式空间将是,
apple
banana
在每一行之后引入了一个新的行。代码标记移除这里的最后一行。所以它没有显示出来。在第二个命令之后,
s/\(.\)\(.*\n\)/&\2\1/
模式空间将是,
apple
pple
a
banana
anana
b
之后,第三
cat fxmgr/wrapperwin32.xml | sed '//d‘| sed '//d’> cleaned.xml
这将从xml文件中删除注释,但我想用空行替换注释,因为我不想干扰其他代码行号。
例如:
line one
xml comment
xml comment
line four
输出:
line one
line four
假设2和3在代码中有xml注释。我们只需删除这些行,并保留空行。我不能添加确切的xml注释,here.So希望上面的示例能够澄清它。
评论中提供的真实示例:
1 <?xml version="1.0" enc
我有一个包含以下格式内容的文件:
wwid 525a9370dcb2348b03884049000190l
第二个字段在每一行上都是不同的,我需要用64个新的不同的字符串替换其中的64行。
我有这个脚本--它确实改变了第二个字段--但是,它正确地更改了第一个匹配的行--但是保持其余的行不变--它一直这样做,直到读取文件的末尾。所以这看起来像是一个循环问题。
有什么想法吗?下面是脚本:
while read line
do sed -e "0,/wwid/ s/wwid .*$/wwid "${line}"/" oldluns
done < new