Список каталогов и файлов, которые пользователь(ubuntu
в примерах)имеет разрешения на чтение с по:
find -exec sudo -u ubuntu test -r '{}' \; -print
Список каталогов и файлов, для которых пользователь имеет права на запись в:
find -exec sudo -u ubuntu test -w '{}' \; -print
Список каталогов и файлов, для которых пользователь имеет разрешения на выполнение с по:
find -exec sudo -u ubuntu test -x '{}' \; -print
Список каталогов и файлов, для которых пользователь имеет права на чтение, запись и выполнение с по:
find -exec sudo -u ubuntu test -rwx '{}' \; -print
Вы можете использовать xmlstarlet
для разбора XML и выбора 2-го, 3-го и 4-го <td/>
значений элементов. Если у вас есть другие таблицы и строки таблиц, вам нужно предоставить больше своего HTML-кода или самостоятельно решить, как выбрать соответствующий раздел.
Сегмент кода для синтаксического анализаpage.html
apple_var=$(
xmlstarlet fo -H page.html |
xmlstarlet sel -t -v 'concat(//td[2],"+",//td[3],"+",//td[4])' -n 2>/dev/null |
bc
)
echo apple_var=$apple_var
Выход
apple_var=1562
Первый вызов xmlstarlet
выполняет синтаксический анализ HTML и максимально возможное преобразование его в XML. Второй вызов анализирует этот XML и извлекает требуемые значения элементов <td/>
вместе с символами +
между ними. Заключительная часть конвейера выполняет математические операции, давая желаемое значение результата. При необходимости он назначается apple_var
.
Ответ зависит от того, насколько гибким может быть ваш ввод.
Если предположить, что
тогда это может быть так же просто, как
apple_num=$(sed -n '3p' file.html | # output the 3rd line
grep -Eo '[0-9]+' | # extract all integers and output then one per line
awk '{s+=$1} END {print s}') # output sum of all the numbers
Однако этот подход очень хрупок. Например, он не будет работать на <tr><td>apple</td><td>400</td><td style="color: #010203">432</td><td>730</td></tr>
(, потому что 010203
в style="color: #010203"
также будет распознан как число ), и даже на <tr><td>mars1</td><td>400</td><td>432</td><td>730</td></tr>
(, потому что 1
в mars1
будет распознан как число ). ].
Конечно, вы можете уточнить ограничения, например.
apple_num=$(sed -n '3p' file.html | # extract 3rd line
egrep -o '>[0-9]+<' | # extract only parts like >123< (one per line)
egrep -o '[0-9]+' | # extract integers (one per line)
awk '{s+=$1} END {print s}') # output sum of all the numbers
но чем точнее вы его уточняете, тем менее читаемым он становится. Так что, как правило, вы должны предпочесть более общий подход, такой как , предложенный roaima , в то время как подход grep/sed/awk можно использовать только во временных быстрых -и -грязных oneliner.