搜索特定的字符串模式并递归地将其替换为小写

发布于 2025-01-08 17:39:24 字数 219 浏览 0 评论 0原文

我必须在文件中递归搜索包含 Aaa*.c 的字符串并将其替换为 aaa*.c

我在一个包含特定模式的目录中有数百个文件(这个 .c 也可以是字符串的扩展名或字符串之间的扩展名),我必须用小写替换这样的字符串

我正在尝试使用 awk '{print tolower($0) 或 tr 但无法搜索特定模式并在此处应用。

谢谢

I have to search for the string which contains Aaa*.c and replace it with aaa*.c in a file recursively.

I have hundreds of files in a directory which contains the specific pattern (this .c can be an extension to the string or in between the string too) and i have to replace such string in lower case

I am trying to use awk '{print tolower($0) or tr but could not search for a specific pattern and apply here.

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

戴着白色围巾的女孩 2025-01-15 17:39:24

由于您将 Perl 放入标签列表中,因此这里有一个 Perl 解决方案

perl -pe "s/(\S+\.c)\b/\L$1/g" myfile > newfile

如果您想就地编辑文件(并丢失原始文件)

perl -pie "s/(\S+\.c)\b/\L$1/g" myfile

要重命名当前目录中的所有 *.c 文件,请写入

perl -e "rename $_, qq(\L$_) for glob '*.c'"

要递归地执行此操作子目录,执行此操作

perl -MFile::Find -e "find sub{ rename $_, qq(\L$_) if /\.c$/i }, '.'"

Since you put Perl in the list of tags, here is a Perl solution

perl -pe "s/(\S+\.c)\b/\L$1/g" myfile > newfile

If you want to edit the file in-place (and lose the original)

perl -pie "s/(\S+\.c)\b/\L$1/g" myfile

To rename all *.c files in the current directory, write

perl -e "rename $_, qq(\L$_) for glob '*.c'"

To do this recursively through all subdirectories, do this

perl -MFile::Find -e "find sub{ rename $_, qq(\L$_) if /\.c$/i }, '.'"
杀手六號 2025-01-15 17:39:24

您可以使用 sed 来实现此目的。

(echo AaA.c; echo bGb) | sed '/\.c$/y/A-Z/a-z/'

输出:

aaa.c
bGb

You can use sed for this.

(echo AaA.c; echo bGb) | sed '/\.c$/y/A-Z/a-z/'

Output:

aaa.c
bGb
零崎曲识 2025-01-15 17:39:24

此处,如果脚本将使用现有文件创建新文件,但带有 *.c 的文件将替换为小写字母。

#!/usr/bin/perl
use strict;
my $file='originalfile.txt';
open(CMD,  "<$file") or die "$!";

my $str;
while(<CMD>) {

    if($_ =~ /\.c$/){

        $str.=lc($_);
    } else {
        $str.=$_;
    }

 }
 print $str;
 close(CMD);
 my $file2='newfile.txt';
 open(CMD,  ">$file2") or die "$!";
 print CMD $str;
 close(CMD);

请告诉我上述内容是否符合您的需求。

here if script will create new file with existing file but the files with *.c will be replaced with lowercase leteters.

#!/usr/bin/perl
use strict;
my $file='originalfile.txt';
open(CMD,  "<$file") or die "$!";

my $str;
while(<CMD>) {

    if($_ =~ /\.c$/){

        $str.=lc($_);
    } else {
        $str.=$_;
    }

 }
 print $str;
 close(CMD);
 my $file2='newfile.txt';
 open(CMD,  ">$file2") or die "$!";
 print CMD $str;
 close(CMD);

let me know if above is correct to your needs.

农村范ル 2025-01-15 17:39:24

这可能对你有用:

echo -e "Aa.c bB.b CC.c\ndD.d EEE.ca Ff_gG.c" | sed 's/\S*\.c\>/\L&/g'
aa.c bB.b cc.c
dD.d EEE.ca ff_gg.c

This might work for you:

echo -e "Aa.c bB.b CC.c\ndD.d EEE.ca Ff_gG.c" | sed 's/\S*\.c\>/\L&/g'
aa.c bB.b cc.c
dD.d EEE.ca ff_gg.c
悲念泪 2025-01-15 17:39:24

听起来您几乎想重命名文件。如果是这样,您可以按如下方式执行:

find -name 'Aaa*.c' -type f | perl -nle'
   my $o=$_; my $n=lc($_);
   next if $n eq $o;
   if (-e $n) {
      warn "$o -> $n: Rename failed: Already exists\n";
   } elsif (!rename($o, $n)) {
      warn "$o -> $n: Rename failed: $!\n";
   }
'

或者仅使用 Perl,

perl -MFile::Find::Rule -e'
   for my $o (
      File::Find::Rule->name("Aaa*.c")->file->in(".")
   ) {
      my $n=lc($_);
      next if $n eq $o;
      if (-e $n) {
         warn "$o -> $n: Rename failed: Already exists\n";
      } elsif (!rename($o, $n)) {
         warn "$o -> $n: Rename failed: $!\n";
      }
   }
'

It almost sounds like you want to rename files. If so, you could do it as follows:

find -name 'Aaa*.c' -type f | perl -nle'
   my $o=$_; my $n=lc($_);
   next if $n eq $o;
   if (-e $n) {
      warn "$o -> $n: Rename failed: Already exists\n";
   } elsif (!rename($o, $n)) {
      warn "$o -> $n: Rename failed: $!\n";
   }
'

Or using just Perl,

perl -MFile::Find::Rule -e'
   for my $o (
      File::Find::Rule->name("Aaa*.c")->file->in(".")
   ) {
      my $n=lc($_);
      next if $n eq $o;
      if (-e $n) {
         warn "$o -> $n: Rename failed: Already exists\n";
      } elsif (!rename($o, $n)) {
         warn "$o -> $n: Rename failed: $!\n";
      }
   }
'
聆听风音 2025-01-15 17:39:24
 echo "Aa.c bB.b CC.c" | perl -ne 's/\b(\w+)(?=\.c)\b/lc $1/eg;print;'
 echo "Aa.c bB.b CC.c" | perl -ne 's/\b(\w+)(?=\.c)\b/lc $1/eg;print;'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文