Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 子字符串检测无法检测换行符_Bash_Shell_File_Io_Scripting - Fatal编程技术网

Bash 子字符串检测无法检测换行符

Bash 子字符串检测无法检测换行符,bash,shell,file,io,scripting,Bash,Shell,File,Io,Scripting,我的代码遍历一个文本文件并对其进行一些处理。最后我在处理(缺少)新词方面遇到了麻烦。我想测试一行的末尾是否有一个换行符。如果是,我想在文件的行中添加一个换行符。现在,我的代码根本没有添加任何新行,我也不太清楚为什么 我在谷歌上搜索过,但什么都没用 while read line || [ -n "$line" ]; do ...#Do things SUB="\n" if [[ "$line" =~ .

我的代码遍历一个文本文件并对其进行一些处理。最后我在处理(缺少)新词方面遇到了麻烦。我想测试一行的末尾是否有一个换行符。如果是,我想在文件的行中添加一个换行符。现在,我的代码根本没有添加任何新行,我也不太清楚为什么

我在谷歌上搜索过,但什么都没用

while read line || [ -n "$line" ]; do
 ...#Do things
        SUB="\n"
        if [[ "$line" =~ .*"$SUB".* ]]; then
            echo "It's there."
            printf "\n" >> $DEC
        fi
done <ip.txt
输出:

line1(\n此处)
第2行(\n此处)
第3行(此处没有\n)
案例2:

知识产权:

Line1(\n此处)
第2行(\n此处)
第3行(\n此处)
输出:

line1(\n此处)
第2行(\n此处)
第3行(\n此处)
但我得到:

第1行(无空格)第2行(无空格)第3行

对于这两种情况,当前方法都存在两个问题。第一个是
read
从行尾删除换行符,因此无法检查换行符的结果,因为它不会出现
read
如果到达文件末尾而不是换行符,将返回一个错误状态,这就是为什么需要
| |[-n“$line”]
来防止循环在读取未终止的行时退出

第二个问题是
SUB=“\n”
在变量中存储反斜杠和“n”;要获取换行符,请使用
SUB=$'\n'

根据您在循环中尝试执行的其他操作,有许多选项。如果将缺少的换行符添加到文件的末尾是唯一的目标,那么在答案中有一系列选项

如果您需要通读这些行,在shell中处理它们,然后输出它们并在末尾添加缺少的换行符,然后只使用当前循环,并使用换行符输出每一行--您需要添加它,无论它最初是否在那里,如果您总是添加它,它将始终在那里

如果您需要明确地找出最后一行是否有换行符,如果有,则执行不同的操作,一个选项是稍微修改原始代码:

while read line; do
    # process lines that had newlines at the end
done <ip.txt
if [ -n "$line" ]; then
    # final line was missing a newline; process it here
fi

您当前的方法有两个问题。第一个是
read
从行尾删除换行符,因此无法检查换行符的结果,因为它不会出现
read
如果到达文件末尾而不是换行符,将返回一个错误状态,这就是为什么需要
| |[-n“$line”]
来防止循环在读取未终止的行时退出

第二个问题是
SUB=“\n”
在变量中存储反斜杠和“n”;要获取换行符,请使用
SUB=$'\n'

根据您在循环中尝试执行的其他操作,有许多选项。如果将缺少的换行符添加到文件的末尾是唯一的目标,那么在答案中有一系列选项

如果您需要通读这些行,在shell中处理它们,然后输出它们并在末尾添加缺少的换行符,然后只使用当前循环,并使用换行符输出每一行--您需要添加它,无论它最初是否在那里,如果您总是添加它,它将始终在那里

如果您需要明确地找出最后一行是否有换行符,如果有,则执行不同的操作,一个选项是稍微修改原始代码:

while read line; do
    # process lines that had newlines at the end
done <ip.txt
if [ -n "$line" ]; then
    # final line was missing a newline; process it here
fi

不确定我理解目标,也不知道如何在一行中的“换行”字符匹配(<代码>”$行“=**”$子“** /代码>)所以FWW…code>SUB=“\n”将为
SUB
分配一个两个字符的字符串。。。字符“\”和“n”;要分配换行符,请尝试
SUB=$'\n'
我不希望这样做。在所有针对换行符的谷歌解决方案都不起作用之后,我只是检查了子字符串检测。我想应该是这样work@markp-扶桑,你给我的潜艇坏了。它没有被检测到,我不确定我是否理解这个目标,也不知道如何在一行中的“换行”字符匹配(<代码>”$行“=**”$子“** /代码>),所以FWW…code>SUB=“\n”将为
SUB
分配一个两个字符的字符串。。。字符“\”和“n”;要分配换行符,请尝试
SUB=$'\n'
我不希望这样做。在所有针对换行符的谷歌解决方案都不起作用之后,我只是检查了子字符串检测。我想应该是这样work@markp-扶桑,你给我的潜艇坏了。它不会被发现你很快!刚在读行时测试了
;i=1;完成<你很快!刚在读行时测试了
;i=1;完成<