Что такое командная строка для печати вывода ниже (использовать встроенный -в функции toupper из awk )?

Используя ответ gue и Bob Eager, я понял, что следующий параметр в /etc/postfix/main.cfтакже работает (на машине с Ubuntu 18.04):

# appending.domain is the MUA's job.
# append_dot_mydomain = no  # --> this is the default setting
append_dot_mydomain = yes  # --> Setting it to yes appends the domain to the hostname

Это также объясняет, что Гью сказал :добавление.domain — это работа почтового агента пользователя. Установив его на yes, мы отменяем это.

Итак, моя установка:

[/etc/postfix/main.cf]
...
append_dot_mydomain = yes
...
myorigin = /etc/mailname
...

[/etc/mailname]
mydomain.example.com

Тем не менее, это не похоже на правильный путь; в конце концов, установив для него значение yes, мы нарушаем принцип, согласно которому «добавление.domain — это работа почтового агента»

Кроме того, я не уверен, почему мне нужно настроить его таким образом, чтобы он работал. У меня есть другой сервер (, настроенный кем-то другим; машина Debian 8.11 ), которая правильно добавляет домен после имени хоста, даже если /etc/mailnameустановлен на домен, и с append_dot_mydomain=no. И на этом сервере он работает как для mailx, так и для писем, отправленных, например. проверка журнала

0
07.05.2021, 10:14
3 ответа

Используйте:

awk -F'( )' '{ $1=toupper($1) }1' infile

использование разделителя полей в режиме регулярных выражений и одиночного пробела, которые мы определили с помощью -F'( )', заключается в том, чтобы сохранить отступ между полями и сохранить внешний вид вывода таким, какой он есть на входе. Если вам не нравится красивый вывод, просто удалите его..

4
28.07.2021, 11:34

Пробовал использовать команду GNU sed, все работает нормально

sed "s/^[a-zA-Z]*/\U&/1" p.txt

выход

ORANGE  5   300 Florida
BANANA  7   500 California
APPLE   3   600 Maryland
GRAPE   14  50  New Mexico
MANGO   30  1   Florida
TOMATO  45  100 California
MELON   22  600 Texas
LEMON   19  400 Florida

Питон

#!/usr/bin/python
import os
import re
k=open('filename','r')
for i in k:
    o=i.split(' ')
    b=o[0].islower()
    if (b is True ):
        up=o[0].upper()
        o[0]=up
        print " ".join(o).strip()

выход

ORANGE  5   300 Florida
BANANA  7   500 California
APPLE   3   600 Maryland
GRAPE   14  50  New Mexico
MANGO   30  1   Florida
TOMATO  45  100 California
MELON   22  600 Texas
LEMON   19  400 Florida
1
28.07.2021, 11:34

Сperl:

perl -pe 's/\S+/\U$&/' < input.txt > output.txt

Это приведет к преобразованию в верхний регистр первой последовательности не -пробельных символов в каждой строке.

Если ввод содержит символы, отличные от -ASCII, и закодирован в UTF -8, добавьте параметр -CS. Если он закодирован в соответствии с кодировкой вашей локали, вместо этого добавьте -Mopen=locale.

Если ваш ввод имеет столбцы с фиксированной шириной (по количеству символов ), вы можете использовать GNU awkи его FIELDWIDTHSспособ указания столбцов:

gawk -v FIELDWIDTHS='8 4 4 *' -v OFS= '{$1 = toupper($1); print}'

Что фактически преобразует в верхний регистр первые 8 символов каждой строки. Что вы также можете сделать с:

awk '{print toupper(substr($0, 1, 8)) substr($0, 9)}'

(gawkи POSIX-совместимые реализации awkпредполагают, что ввод представляет собой текст, закодированный в соответствии с кодировкой локали ).

2
28.07.2021, 11:34

Теги

Похожие вопросы