Команда
sed 's/[^0-9]//g'
будет действовать как фильтр, пропускающий только цифры.
Так бы и
sed 's/[^0-9]*//g'
Но из-за g
в конце, *
больше не нужно (в конце об этом ).
Регулярное выражение [^0-9]
означает «любой символ, не являющийся цифрой», а команда sed
s/[^0-9]//g
означает «заменить любой нецифровой символ -ничем, затем повторить столько раз, сколько возможно». в каждой строке ввода (, т. е. не только первая не -цифра в каждой строке )".
Пример:
$ echo '1-2 1-2? Is this mic on? Hello world! It is 2018!' | sed 's/[^0-9]//g'
12122018
То же, что и команда
tr -dc '0-9\n'
который также удаляет не -цифру в своем вводе (и оставляет новые строки тоже ).
Разница между [^0-9]
и [^0-9]*
заключается в том, что первый соответствует ровно одному нецифровому символу -, а второй соответствует нулю или более нецифровым символам -. Если вы хотите удалить не -цифры , вы не хотите сопоставлять пустые строки (с «нулем» в «ноль или больше» выше ), поэтому имеет смысл соответствует [^0-9]
, чем соответствует [^0-9]*
.
Флаг g
в конце команды sed
означает «глобально», то есть везде в строке, а не только в первом совпадении. Удалив это, вы заметите, что
$ echo '123 testing' | sed 's/[^0-9]*//'
123 testing
соответствует пустому месту перед 1
и ничего не заменяет. Более наглядный пример этого:
$ echo '123 testing' | sed 's/[^0-9]*/(&)/'
()123 testing
... и с g
в конце:
$ echo '123 testing' | sed 's/[^0-9]*/(&)/g'
()1()2()3( testing)
И тогда у нас есть
$ echo '123 testing' | sed 's/[^0-9]//'
123testing
, который соответствует и заменяет пробел, который не является цифрой -. Более наглядный пример этого:
$ echo '123 testing' | sed 's/[^0-9]/(&)/'
123( )testing
... и с g
в конце:
$ echo '123 testing' | sed 's/[^0-9]/(&)/g'
123( )(t)(e)(s)(t)(i)(n)(g)
Я сослался на этот пост, чтобы получить информацию о настройке и просмотре электронной почты.
Пришлось установить почтовый MTA (Агент передачи почты ), так как stderr и stdout явно отправляются на электронную почту.
aptitude install postfix
Используйте подобную команду, чтобы просмотреть несколько последних строк файла (или открыть в редакторе)
tail -f /var/mail/<your_username>
Затем я увидел ошибку безопасности, и мне пришлось переключиться с «root» на «» для пользователя в файле задания cron.
Всего лишь дикая догадка, но разве это тоже не сработает?scp -i /home/nealwalters/keys/SFTPUser1_Private.pem /home/nealwalters/downloads/*.csv SFTPUser3@192.168.1.179:User3ToMyCompany
Вы также можете создать ~/.ssh/config
с содержимым
Host company
Hostname 192.168.1.179
User STFPUser3
IdentityFile /home/nealwalters/keys/SFTPUser1_Private.pem
И тогда вы можете сделать это всего лишь:
scp /home/nealwalters/downloads/*.csv company:User3ToMyCompany
Причина, по которой вы получаете ошибку проверки ключа хоста, заключается в том, что пользователь, выполняющий сценарий, не имеет ключа хоста для этого хоста. Кажется, вы запускаете cronjob как root. Вы также можете создать cronjob со своим пользователем с помощью crontab -e
.