Как я могу заменить пробелы на подчеркивания и все в нижнем регистре?
Вопрос
У меня есть текстовый файл, который содержит:
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
Как я мог бы этого добиться?
Решение
Еще раз изучив документацию sed и следуя советам из комментариев, следующая команда должна работать.
sed -r {filehere} -e 's/[A-Z]/\L&/g;s/ /_/g' -i
Другие советы
Другой метод Perl:
perl -pe 'y/A-Z /a-z_/' file
tr
одни работают:
tr ' [:upper:]' '_[:lower:]' < file
Существует 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
sed "y/ABCDEFGHIJKLMNOPQRSTUVWXYZ /abcdefghijklmnopqrstuvwxyz_/" filename
Просто используйте вашу оболочку, если у вас есть Bash 4
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()
Не связан с StackOverflow