如何将空格更改为下划线和小写一切?

时间:2009-11-27 12:42:49

标签: perl shell sed awk

我有一个包含以下内容的文本文件:

Cycle code
Cycle month
Cycle year
Event type ID
Event ID
Network start time

我想更改此文本,以便在有空格时,我想用_替换它。之后,我希望字符小写字母如下:

cycle_code
cycle_month
cycle_year
event_type_id
event_id
network_start_time

我怎么能做到这一点?

6 个答案:

答案 0 :(得分:12)

另一种Perl方法:

perl -pe 'y/A-Z /a-z_/' file

答案 1 :(得分:11)

tr单独工作:

tr ' [:upper:]' '_[:lower:]' < file

答案 2 :(得分:4)

查看sed文档以及注释中的以下建议,以下命令应该有效。

sed -r {filehere} -e 's/[A-Z]/\L&/g;s/ /_/g' -i

答案 3 :(得分:3)

您的问题中也有perl个标记。所以:

#!/usr/bin/perl

use strict; use warnings;

while (<DATA>) {
    print join('_', split ' ', lc), "\n";
}
__DATA__
Cycle code
Cycle month
Cycle year
Event type ID
Event ID
Network start time

或者:

perl -i.bak -wple '$_ = join('_', split ' ', lc)' test.txt

答案 4 :(得分:1)

如果你有Bash 4,只需使用你的shell

while read -r line
do
    line=${line,,} #change to lowercase
    echo ${line// /_}
done < "file"  > newfile
mv newfile file

使用gawk

awk '{$0=tolower($0);$1=$1}1' OFS="_" file

使用Perl:

perl -ne 's/ +/_/g;print lc' file

使用Python:

>>> f=open("file")
>>> for line in f:
...   print '_'.join(line.split()).lower()
>>> f.close()

答案 5 :(得分:1)

sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ /abcdefghijklmnopqrstuvwxyz_/" filename