shell查看文件空行行号

本文介绍了在Linux环境下四种不同的方法来查找文件中的空行及其对应的行号,包括使用sed、grep、awk等实用工具的具体命令。

linux下查找文件中空行的行号

以aa.txt举例:

方法1:sed -n '/[a-zA-Z0-9@#$%^&*]/!=' aa.txt
方法2:grep -n ^$ aa.txt

方法3:awk '/^$/{print NR}' aa.txt
 方法4:sed -n '/^$/=' aa.txt
shell脚本中,有多种打印行号的方法,以下是一些常见的情况及对应的方法: ### 打印文件行号 - **使用`cat -n`**:`cat -n oldboy.txt` 可以打印`oldboy.txt`文件行号和内容[^1]。 - **使用`nl`**:`nl oldboy.txt` 同样能为`oldboy.txt`文件内容添加行号并输出[^1]。 - **使用`less -N`**:`less -N nginx.conf` 在使用`less`查看`nginx.conf`文件时显示行号[^1]。 - **使用`grep -n`**:`grep -n “. “ oldboy.txt` 和 `grep -n “. *“ oldboy.txt` 可以匹配文件中的行并打印行号和匹配内容,不过这两个命令在正则表达式的精确性上可能有细微差别,前者可能匹配包含任意一个字符的行,后者匹配包含任意数量字符的行[^1]。 - **使用`awk`**:`awk '{print NR" " $0}' oldboy.txt` 通过`awk`的内置变量`NR`获取行号,并将行号和对应行内容输出[^1]。 - **使用`sed`**:`sed ‘=’ /etc/rsyslog.conf` 会在`/etc/rsyslog.conf`文件的每一行前插入行号,但输出格式可能需要进一步处理[^1]。 - **在`vi`编辑器中**:打开文件后,输入`set nu` 或 `set number` 可以在编辑器中显示行号[^1]。 ### 打印文件空行行号 - **使用`awk`匹配空行**:`awk '/^\s*$/{print NR}' nowcoder.txt` 可以输出`nowcoder.txt`文件空行行号,其中`/^\s*$/`用于匹配空行或只包含空白字符的行,`NR`是`awk`的内置变量表示行号[^2]。 - **使用`awk`判断行长度**:`awk '{if(length($0)==0) print NR}' nowcoder.txt` 利用`awk`的内置函数`length()`判断行的长度,如果长度为零则表示是空行,打印其行号[^3]。 ### 打印脚本执行出错时的行号 - **使用`PS4`和`tail`(适用于较新的shell)**:通过设置`PS4`将每个命令的退出状态和行号发送到专用文件描述符,并使用`tail`仅打印最后一个在shell退出之前给予该FD的行,但文档未给出具体示例代码[^4]。 - **在脚本函数中手动或自动获取行号**:在自定义的日志函数中,可以使用`$LINENO`获取当前行号,示例如下: ```bash #${FUNCNAME[1]}表示调用该函数的函数 #$LINENO表示当前代码行号 Log(){ local log_level=$1 local log_info=$2 local line=$3 local script_name=$(basename $0) case ${log_level} in "INFO") echo -e "\033[32m$(date "+%Y-%m-%d %T.%N") [INFO]: ${log_info}\033[0m" ;; "WARN") echo -e "\033[33m$(date "+%Y+%m+%d %T.%N") [WARN]: ${log_info}\033[0m" ;; "ERROR") echo -e "\033[31m$(date "+%Y-%m-%d %T.%N") [ERROR ${script_name} ${FUNCNAME[1]}:$line]: ${log_info}\033[0m" ;; *) echo -e "${@}" ;; esac } ceshi(){ # 打印出错的行,55是手动写的 Log ERROR dfddfdsf 55 # 打印出错的行,$LINENO Log ERROR djgnsjkghjdskgj $LINENO } ceshi ``` 在上述脚本中,`$LINENO`可以获取当前代码行号,并传递给日志函数进行输出[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值