我尝试了这个命令:
# mount | grep -E '\s/dev/shm\s' | awk -F "(" '{print $NF}'
期望:
rw,nosuid,nodev,seclabel
我得到了什么:
rw,nosuid,nodev,seclabel)
我也尝试过这个:
mount | grep -E '\s/dev/shm\s' | awk -F "(" '{print $NF}' | cut -c -24
rw,nosuid,nodev,seclabel
我可以得到准确的单词,但默认情况下,任何一个单词不存在,它就不起作用,所以)
最后我需要删除这个字符,有人知道吗?教我解决这个问题。
答案1
我猜测你的mount | grep
命令的输出是这样的:
$ mount | grep -E '\s/dev/shm\s'
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev,inode64)
因此,您想要的(再次,我在这里猜测)是包含的行中括号之间的文本/dev/shm
。 如果是这样,请尝试:
$ mount | grep -oP '\s/dev/shm\s.+\(\K[^)]+'
rw,nosuid,nodev,inode64
该-o
选项指示grep
仅打印行的匹配部分,并-P
启用 PCRE(Perl 兼容正则表达式),这为我们提供了\K
“忽略到目前为止匹配的所有内容”的功能。因此,正则表达式将查找/dev/shm
由空格包围的字符,然后查找尽可能多的字符,直到左括号 ( .+\(
)。现在,由于 ,到此处的所有内容都被忽略,\K
然后我们只匹配最长的非-)
字符 ( [^)]+
)。
如果由于某种原因您确实需要使用awk
,则无需grep
:
$ mount | awk -F'[()]' '/\s\/dev\/shm\s/{print $(NF-1)}'
rw,nosuid,nodev,inode64
答案2
findmnt
通常用于查找和显示设备名称、挂载或文件系统类型等详细信息。
findmnt -n --target /dev/shm --output=options
积极的坐骑位于/proc/mounts
并且具有固定数量的列,这使得它很容易解析:
while read -r _ a _ b _; do
[[ $a = /dev/shm ]] && echo $b
done < /proc/mounts