Распечатайте все строки который не содержащий пунктуацию

Решение 1:

Вы можете модуль PAM pam_homecheck

Все, что это делает, проверить, существует ли корневой каталог пользователя и отказывается от сессии, если ни один не найден.

проблема, это только доступно в openSUSE, но можно поместить pam_homecheck.so от загруженных пакетов и зависимости от установки со справкой ldd pam_homecheck.so.

Решение 2: можно добавить ниже содержания в /etc/bashrc но Только применимый для входа в систему оболочки/шпаклевки

[[ $HOME == / ]] && { echo "Error: Home Dir not define.."; exit 1; }

Решение 3:

Отклоните, если домашний dir не установил (протестированный и работающий ниже шагов в Ubuntu)

Отклонять WinScp

aptitude install libpam-script

Открытый"/etc/pam.d/common-auth"с Вашим faorite редактором и добавляют ниже записей

auth optional pam_script.so  # add at the last 

Открытый"/usr/share/libpam-script/pam_script_auth"с Вашим любимым редактором и добавляют ниже записей

#!/bin/bash

Pam_home=$(awk -v u=$PAM_USER -F: '($1 == u ){print $6}' /etc/passwd)

if [[ $Pam_home == / ]]; then
        echo "Error: Home Dir not define.."
        kill -9 $PPID # Force fully kill winscp pid
else
        /usr/lib/openssh/sftp-server
fi

Отклонять от входа в систему Shell/шпаклевки

Это отошлет и запустит тот же скрипт от местоположения по умолчанию т.е."/usr/share/libpam-script/pam_script_auth"Или можно проверить в журналах"tail -f /var/log/auth.log"

8
24.04.2015, 10:50
3 ответа

Ваш grep печатает все строки, содержащие символы без пунктуации. Это не то же самое, что печатать все строки, не содержащие знаков препинания.

Для последнего вам нужен переключатель -v (печатать строки, не соответствующие шаблону):

grep -v '[[:punct:]]' file.txt

Если по какой-то причине вы не хотите использовать -v , вы должны убедиться, что вся строка состоит из непунктуационных символов:

grep '^[^[:punct:]]\+$' file.txt
11
27.01.2020, 20:11

В sed можно сделать что-то вроде:

sed '/[:punct:]]/!d'

В awk можно сделать:

awk '!/[[:punct:]]/'

1
27.01.2020, 20:11

A Perl единицы:

perl -nle 'print unless /\p{XPosixPunct}/' file

Это будет соответствовать -!"#$%&'()*+,./:;<=>?@[\]^_`{|}~, которые юникод считает пунктуацией и символами.

или:

perl -nle 'print unless /\p{Punct}/' file

\p{Punct} только в одном случае совпадает -!"#%&'()*,./:;?@[\]_{}, пропустив $+<=>^`COPY14~, которые юникод считает символами.

perl по умолчанию используют POSIX-локаль. Если вы не используете perl, вы должны все установить так LC_ALL=POSIX, потому что разные локали могут иметь разные знаки препинания, как SAA C имеет ¢.

1
27.01.2020, 20:11

Теги

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