如何在Bash脚本中删除换行符?

3
我对一个小脚本有一个小问题。文本文件有很多像这样的条目:
permission-project1-admin
permission-project2-admin
....

这段话的意思是:“这个脚本看起来像这样(实际上,它很糟糕,但仍然对我有帮助):”
#!/bin/bash
for i in $(cat adminpermission.txt); do
    permission=$(echo $i | cut -f1)

printf "dn:$permission,ou=groups,dc=domain,dc=com \n"
printf "objectclass: groupOfUniqueNames \n"
printf "objectclass: top \n"
printf "description: \n"
printf "cn:$permission \n\n"
done

输出看起来没问题,但是由于文本文件末尾有一个换行符,printf的第一行被分成了两行,类似于:
dn:permission-project1-admin
,ou=groups,dc=domain,dc=com
objectclass: groupOfUniqueNames
objectclass: top
description:
cn:permission-project1-admin

我的问题是,如何消除第一二行之间的换行符?

echo -n 命令会省略结尾的换行符。 - Perleone
仅移除第一个 printf 输出中的 -n - Alexander Filёv
3个回答

3

2

尝试:

$(echo $i | tr -d "\n" | cut -f1)

这行代码对我没用。输出与上面相同。但是非常感谢你的提示。 - user2005580

0

你有检查过你的adminpermission.txt文件是否包含DOS风格的回车符吗?你的代码会去掉换行符,但是根据你查看输出的方式不同,回车符可能会导致行断裂,就像你所描述的那样。

你可以尝试

mv adminpermission.txt backup.txt
tr -d '\r' < backup.txt > adminpermission.txt 

将换行符转换为UNIX格式,然后再次运行您的脚本。


这对我有用。adminpermission文件包含DOS风格的回车符。将文件转换为UNIX EOL后,它正常工作了。非常感谢。 - user2005580
太好了!请务必通过点击旁边的复选框将答案标记为已接受,以授予积分并帮助人们在未来找到正确的答案。 - that other guy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接